From 703484050325ac52f80f8f0acb01dc47cb20b67f Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Thu, 11 Jul 2019 00:25:12 -0700
Subject: [PATCH 01/62] Add YAML file template for a future QStrip_Vertical.py
 script

---
 .../Connector_Samtec/QStrip_Vertical.yaml     | 57 +++++++++++++++++++
 1 file changed, 57 insertions(+)
 create mode 100644 scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
new file mode 100644
index 000000000..04d1783a5
--- /dev/null
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
@@ -0,0 +1,57 @@
+## Name:
+##   description: ""
+##   datasheet: ""
+##   tags: ""
+##   layout:
+##     type: "(Terminal|Socket)"
+##     size: # Overall connector dimensions
+##       - !!float mm # width
+##       - !!float mm # height
+##     silk_offset: mm # silkscreen offset from the F.Fab outline
+##   banks:
+##     n: !!int # number of banks in the connector
+##     pins: !!int even # number of pins in a bank
+##     diff: !!int <= n # number of differential banks
+##     space: !!float mm # distance between adjacent banks
+##     size: # Dimensions of bank outlines drawn on F.Fab
+##       - !!float mm # width
+##       - !!float mm # height
+##   pins:
+##     signal: # Signal pin parameters
+##       pitch: !!float mm
+##       size:
+##         - !!float mm # width
+##         - !!float mm # height
+##       y: !!float mm # vertical offset
+##     ground: # Ground pin parameters
+##       size:
+##         - # Ground pad widths
+##           - !!float mm # outer pins 
+##           - !!float mm # inner pins
+##         - !!float mm # height
+##       space: # Distance between ground pads within each bank
+##         - !!float mm # outer pins
+##         - !!float mm # inner pins
+##   holes: # [optional] hole pair specifications
+##     - # Hole spec. 1
+##       name: "" # [optional] name/number for plated holes
+##       drill:
+##         - !!float mm # drill diameter
+##         - !!float mm # [optional] annular ring
+##       space: !!float mm # distance between holes mirrored about the x-axis
+##       y: !!float mm # vertical offset
+##     - # Hole spec. 2
+##     - # ...
+##
+
+Samtec_QTH-090-01-x-D-A:
+  description: ""
+  datasheet: ""
+  tags: ""
+  layout: {type: "Terminal", size: [60.0,5.97], silk_offset: 0.25}
+  banks: {n: 3, pins: 60, diff: 0, space: 20.0, size: [16.4,3.9]}
+  pins:
+    signal: {pitch: 0.5, size: [0.305,1.45], y: 1.45}
+    ground: {height: 0.64, width: [2.54,4.7], space: [16.89,6.35]}
+  holes:
+    - {drill: [1.02], space: 58.48, y: 2.03}

From ea323ad2faafc7a5db511fd1022f73a425890c1c Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Wed, 17 Jul 2019 22:12:25 -0700
Subject: [PATCH 02/62] Create QStrip_Vertical.py to generate Samtec Q Strip
 footprints

---
 .../Connector_Samtec/QStrip_Vertical.py       | 323 ++++++++++++++++++
 .../Connector_Samtec/QStrip_Vertical.yaml     | 164 +++++----
 2 files changed, 430 insertions(+), 57 deletions(-)
 create mode 100755 scripts/Connector/Connector_Samtec/QStrip_Vertical.py

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
new file mode 100755
index 000000000..c197ebd8e
--- /dev/null
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
@@ -0,0 +1,323 @@
+#!/usr/bin/python
+
+"""
+YAML footprint specification
+
+---
+Footprint_Name:
+  description: 'Brief description of the footprint'
+  datasheet: 'URL to footprint datasheet'
+  tags: 'KiCad tags go here'
+  layout:
+    type: '(Terminal|Socket)'
+    size: # Overall connector dimensions
+      - !!float mm # width
+      - !!float mm # height
+    silk_offset: mm # silkscreen offset from the F.Fab outline
+  banks:
+    n: !!int # number of banks in the connector
+    pins: !!int even # number of pins in a bank
+    diff: !!int <= n # number of differential banks
+    space: !!float mm # distance between adjacent banks
+    width: !!float mm # Width of outline on F.Fab
+    height: !!float mm # Height of outline on F.Fab
+  pins:
+    signal: # Signal pin parameters
+      pitch: !!float mm
+      width: !!float mm # Pad width
+      height: !!float mm # Pad height
+      y: !!float mm # vertical offset
+    ground: # Ground pin parameters
+      width:
+        - !!float mm # outer pins 
+        - !!float mm # inner pins
+      height: !!float mm # Ground pad heights
+      space: # Distance between ground pads within each bank
+        - !!float mm # outer pins
+        - !!float mm # inner pins
+  holes: # [optional] hole pair specifications
+    - # Hole spec. 1
+      name: "" # [optional] name/number for plated holes
+      drill: !!float mm # drill diameter
+      ring: !!float mm # [optional] annular ring
+      space: !!float mm # distance between holes mirrored about the x-axis
+      y: !!float mm # vertical offset
+    - # Hole spec. 2
+...
+"""
+
+import sys
+import os
+import argparse
+import math
+import yaml
+
+# Load parent path of KicadModTree
+sys.path.append(os.path.join(sys.path[0], "..", "..", ".."))
+
+from KicadModTree import *
+
+def markerArrow(x, y, width, line_width, layer, angle=0, close=True):
+    node = Node()
+    points = [(-width/2, width/2),
+              (0, 0),
+              (width/2, width/2)]
+
+    if close:
+        points.append((-width/2, width/2))
+
+    node.append(PolygoneLine(nodes = points,
+                             layer = "F.Fab",
+                             width = line_width))
+    node.insert(Rotation(angle))
+    node.insert(Translation(x,y))
+    return node
+
+def generate_one_footprint(param, config, library):
+    fp = Footprint(param['name'])
+
+    # Terminal or Socket mode
+    mode = param['layout']['type'].capitalize()
+
+    # Bank parameters
+    banks  = param['banks']['n']
+    bank_x = param['banks']['space']
+    pins_per_bank = param['banks']['pins']
+
+    ############################################################################
+    # Copper layer(s)
+    
+    # Signal pad parameters
+    pitch = param['pins']['signal']['pitch']
+    pad_w = param['pins']['signal']['width']
+    pad_h = param['pins']['signal']['height']
+    pad_y = param['pins']['signal']['y']
+
+    # Pin 1 position
+    pin1 = Vector2D(0,0)
+    pin1.x = -(pins_per_bank / 4)*pitch + pitch/2 - ((banks-1) / 2)*bank_x
+    if mode == "Terminal":
+        pin1.y = -pad_y
+    elif mode == "Socket":
+        pin1.y = pad_y
+    else:
+        raise ValueError("Connector type must be either 'Terminal' or 'Socket'")
+    
+    # Bank 1 center point
+    bank1_mid = pin1.x - pitch/2 + (pins_per_bank / 4)*pitch
+
+    # Place signal pads
+    n = 1 # Pin counter
+    pin = [] # Pin position list, organized by bank
+    for b in range(0, banks):
+        pin.append([])
+        for p in range(0, pins_per_bank):
+            # Compute next pad location
+            pos = Vector2D(pin1.x + (p // 2)*pitch + b*bank_x,
+                           pin1.y - (p  % 2)*(2*pin1.y))
+            if b < param['banks']['diff'] and ((p+1) % 6  == 0 or (p+2) % 6 == 0):
+                # Place gaps between differential pairs
+                continue
+            else:
+                pin[b].append(pos) # Add position to list
+                # Create pad (both single-ended and differential)
+                pad = Pad(number = str(n),
+                          at = pos,
+                          size = (pad_w, pad_h),
+                          type = Pad.TYPE_SMT,
+                          layers = Pad.LAYERS_SMT,
+                          shape = Pad.SHAPE_RECT)
+                fp.append(pad)
+                n = n + 1
+    
+    # Ground pad parameters
+    gnd_height    = param['pins']['ground']['height']
+    gnd_width_out = param['pins']['ground']['width'][0]
+    gnd_width_in  = param['pins']['ground']['width'][1]
+    gnd_space_out = param['pins']['ground']['space'][0] / 2
+    gnd_space_in  = param['pins']['ground']['space'][1] / 2
+    gnd_space = [-gnd_space_out, -gnd_space_in, gnd_space_in, gnd_space_out]
+    gnd_size  = [Vector2D(gnd_width_out, gnd_height),
+                 Vector2D(gnd_width_in,  gnd_height),
+                 Vector2D(gnd_width_in,  gnd_height),
+                 Vector2D(gnd_width_out, gnd_height)]
+    # Place ground plane pads
+    for b in range(banks):
+        mid = bank1_mid + b*bank_x # Bank midpoint
+        for i in range(len(gnd_space)):
+            pad = Pad(number = str(n),
+                      at = Vector2D(mid+gnd_space[i], 0),
+                      size = gnd_size[i],
+                      type = Pad.TYPE_SMT,
+                      layers = Pad.LAYERS_SMT,
+                      shape = Pad.SHAPE_RECT)
+            fp.append(pad)
+            n = n + 1
+
+    ############################################################################
+    # Holes
+    if 'holes' in param:
+        for p in param['holes']:
+            h = [Pad(number = config['mounting_pad_number'] if 'ring' in p else "",
+                     at = (m*p['space']/2, p['y']),
+                     drill = p['drill'],
+                     size = p['drill']+p['ring'] if 'ring' in p else p['drill'],
+                     type = Pad.TYPE_THT if 'ring' in p else Pad.TYPE_NPTH,
+                     layers = Pad.LAYERS_THT if 'ring' in p else Pad.LAYERS_NPTH,
+                     shape = Pad.SHAPE_CIRCLE) for m in (-1,1)]
+            fp.append(h[0])
+            fp.append(h[1])
+
+    ############################################################################
+    # Fabrication layer: F.Fab
+    fab_line = config['fab_line_width']
+    fab_mark = pitch #config['fab_pin1_marker_length']
+    fab_width = param['layout']['width']
+    fab_height = param['layout']['height']
+    fab_y = fab_height / 2
+    lEdge = -fab_width / 2
+    rEdge = lEdge + fab_width
+    chamfer = fab_height / 4 # 1/4 connector height, cosmetic only
+
+    if mode == 'Terminal':
+        # End outlines
+        points = [(lEdge, -fab_y),
+                  (lEdge, fab_y-chamfer),
+                  (lEdge+chamfer, fab_y)]
+        fp.append(PolygoneLine(nodes = points,
+                               layer = "F.Fab",
+                               width = fab_line))
+        fp.append(PolygoneLine(nodes = points,
+                               layer = "F.Fab",
+                               width = fab_line,
+                               x_mirror = 0))
+        # Top and bottom lines
+        fp.append(Line(start = (lEdge, -fab_y),
+                       end   = (rEdge, -fab_y),
+                       layer = "F.Fab",
+                       width = fab_line))
+        fp.append(Line(start = (lEdge+chamfer, fab_y),
+                       end   = (rEdge-chamfer, fab_y),
+                       layer = "F.Fab",
+                       width = fab_line))
+        # Pin 1 marker
+        fp.append(markerArrow(x = pin1.x,
+                              y = (fab_mark-fab_height) / 2,
+                              width = fab_mark,
+                              angle = 180,
+                              layer = "F.Fab",
+                              close = False,
+                              line_width = fab_line))
+    elif mode == 'Socket':
+        # Outline rectangle
+        fp.append(RectLine(start = (lEdge, -fab_y),
+                           end   = (rEdge,  fab_y),
+                           layer = "F.Fab",
+                           width = fab_line))
+        # Chamfer lines
+        fp.append(Line(start = (lEdge, -fab_y+chamfer),
+                       end   = (lEdge+chamfer, -fab_y),
+                       layer = "F.Fab",
+                       width = fab_line))
+        fp.append(Line(start = (rEdge, -fab_y+chamfer),
+                       end   = (rEdge-chamfer, -fab_y),
+                       layer = "F.Fab",
+                       width = fab_line))
+        # Pin 1 marker
+        fp.append(markerArrow(x = pin1.x,
+                              y = (fab_height-fab_mark) / 2,
+                              width = fab_mark,
+                              layer = "F.Fab",
+                              close = False,
+                              line_width = fab_line))
+        
+    ############################################################################
+    # Metadata
+    
+    # Part number
+    if 'pn' in param:
+        partnum = param['pn']
+    else:
+        partnum = param['name'].split('_')[1]
+        
+    # Pins or pairs/bank
+    if param['banks']['diff'] == banks:
+        # Differential mode: round up to nearest even number of pairs
+        pins_or_pairs = (pins_per_bank // 3) + (pins_per_bank // 3) % 2
+    else:
+        pins_or_pairs = pins_per_bank
+
+    # Description
+    desc = param['description']
+    desc = desc.format(pn = partnum,
+                       type = mode,
+                       ds = param['datasheet'],
+                       pitch = pitch,
+                       banks = banks,
+                       pins = pins_or_pairs)
+    
+    fp.setDescription(desc)
+    fp.setTags(param['tags'])
+
+    ############################################################################
+    # Write kicad_mod file
+    
+    os.makedirs(library, exist_ok=True)
+    filename = os.path.join(library, param['name'] + '.kicad_mod')
+    KicadFileHandler(fp).writeFile(filename)
+
+################################################################################
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser()
+    parser.add_argument('--global-config', type=str, nargs='?',
+                        default='../../tools/global_config_files/config_KLCv3.0.yaml',
+                        help='Global KLC configuration YAML file')
+    parser.add_argument('--series-config', type=str, nargs='?',
+                        default='../conn_config_KLCv3.yaml',
+                        help='Series KLC configuration YAML file')
+    parser.add_argument('--library', type=str, nargs='?',
+                        default='Connector_Samtec_QStrip.pretty',
+                        help='KiCad library path')
+    parser.add_argument('files', metavar='file', type=str, nargs='*',
+                        help='YAML file(s) containing footprint parameters')
+    args = parser.parse_args()
+
+    with open(args.global_config, 'r') as config_stream:
+        try:
+            config = yaml.safe_load(config_stream)
+        except yaml.YAMLError as exc:
+            print(exc)
+
+    with open(args.series_config, 'r') as config_stream:
+        try:
+            config.update(yaml.safe_load(config_stream))
+        except yaml.YAMLError as exc:
+            print(exc)
+
+    if len(args.files) == 0:
+        parser.print_help()
+        sys.exit(1)
+
+    print("Library:", args.library)
+    
+    for path in args.files:
+        print("Reading", path)
+        with open(path, 'r') as stream:
+            try:
+                footprints = yaml.safe_load(stream)
+                
+                if footprints is None:
+                    print(path, "empty, skipping...")
+                    continue
+
+                for fp in footprints:
+                    print("  - Generate {}.kicad_mod".format(fp))
+                    fp_params = footprints.get(fp)
+                    
+                    if 'name' in fp_params:
+                        print("WARNING: setting 'name' to", fp)
+                    
+                    fp_params['name'] = fp
+                    generate_one_footprint(fp_params, config, args.library)
+            except yaml.YAMLError as exc:
+                print(exc)
diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
index 04d1783a5..ea6f08321 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
@@ -1,57 +1,107 @@
-## Name:
-##   description: ""
-##   datasheet: ""
-##   tags: ""
-##   layout:
-##     type: "(Terminal|Socket)"
-##     size: # Overall connector dimensions
-##       - !!float mm # width
-##       - !!float mm # height
-##     silk_offset: mm # silkscreen offset from the F.Fab outline
-##   banks:
-##     n: !!int # number of banks in the connector
-##     pins: !!int even # number of pins in a bank
-##     diff: !!int <= n # number of differential banks
-##     space: !!float mm # distance between adjacent banks
-##     size: # Dimensions of bank outlines drawn on F.Fab
-##       - !!float mm # width
-##       - !!float mm # height
-##   pins:
-##     signal: # Signal pin parameters
-##       pitch: !!float mm
-##       size:
-##         - !!float mm # width
-##         - !!float mm # height
-##       y: !!float mm # vertical offset
-##     ground: # Ground pin parameters
-##       size:
-##         - # Ground pad widths
-##           - !!float mm # outer pins 
-##           - !!float mm # inner pins
-##         - !!float mm # height
-##       space: # Distance between ground pads within each bank
-##         - !!float mm # outer pins
-##         - !!float mm # inner pins
-##   holes: # [optional] hole pair specifications
-##     - # Hole spec. 1
-##       name: "" # [optional] name/number for plated holes
-##       drill:
-##         - !!float mm # drill diameter
-##         - !!float mm # [optional] annular ring
-##       space: !!float mm # distance between holes mirrored about the x-axis
-##       y: !!float mm # vertical offset
-##     - # Hole spec. 2
-##     - # ...
-##
-
-Samtec_QTH-090-01-x-D-A:
-  description: ""
-  datasheet: ""
-  tags: ""
-  layout: {type: "Terminal", size: [60.0,5.97], silk_offset: 0.25}
-  banks: {n: 3, pins: 60, diff: 0, space: 20.0, size: [16.4,3.9]}
-  pins:
-    signal: {pitch: 0.5, size: [0.305,1.45], y: 1.45}
-    ground: {height: 0.64, width: [2.54,4.7], space: [16.89,6.35]}
-  holes:
-    - {drill: [1.02], space: 58.48, y: 2.03}
+# QTH family; 3 Banks
+Samtec_QTH-090-01-x-D_P0.5mm_Vertical: &QTH-090-01-x-D
+  description: &QStrip_desc >-
+    Samtec {pn:s} {pitch:1.2f}mm Q Strip® High-Speed Ground Plane {type:s} Strip;
+    {banks:d} banks, {pins:d} pins/bank ({ds:s})
+  datasheet: 'http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf'
+  tags: 'connector Samtec HSMC QTH mezzanine terminal vertical'
+  layout: &QTH_layout
+    type: 'Terminal'
+    width: 60.0
+    height: 5.97
+    silk_offset: 0.25
+  banks: {n: 3, pins: 60, diff: 0, space: 20.0, width: 16.4, height: 3.9}
+  pins: &QTH_pins
+    signal: {pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
+    ground: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
+
+Samtec_QTH-090-01-x-D-A_P0.5mm_Vertical:
+  <<: *QTH-090-01-x-D
+  holes:
+    - {drill: 1.02, space: 58.48, y: -2.03}
+
+Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical:
+  pn: 'ASP-122952-01'
+  description: >-
+    Samtec {pn:s} HSMC Card {type:s};
+    modified QTH-090-01-L-D-A, Bank 1 differential ({ds:s})
+  datasheet: 'http://suddendocs.samtec.com/prints/asp-122952-01-mkt.pdf'
+  tags: 'connector Samtec HSMC card terminal mezzanine vertical differential'
+  layout: *QTH_layout
+  banks: {n: 3, pins: 60, diff: 1, space: 20.0, width: 16.4, height: 3.9}
+  pins: *QTH_pins
+  holes:
+    - {drill: 1.02, space: 58.48, y: -2.03}
+
+# QTH family; 3 banks; differential
+Samtec_QTH-060-01-x-D-DP_P0.5mm_Vertical: &QTH-060-01-x-D-DP
+  description: &QPairs_desc >-
+    Samtec {pn:s} {pitch:1.2f}mm Q Pairs® High-Speed Ground Plane {type:s} Strip,
+    Differential Pair; {banks:d} banks, {pins:d} pairs/bank ({ds:s})
+  datasheet: 'http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf'
+  tags: 'connector Samtec QTH mezzanine terminal vertical differential'
+  layout: *QTH_layout
+  banks: {n: 3, pins: 60, diff: 3, space: 20.0, width: 16.4, height: 3.9}
+  pins: *QTH_pins
+
+Samtec_QTH-060-01-x-D-DP-A_P0.5mm_Vertical:
+  <<: *QTH-060-01-x-D-DP
+  holes:
+    - {drill: 1.02, space: 58.48, y: -2.03}
+
+# QSH family; 3 Banks
+Samtec_QSH-090-01-x-D_P0.5mm_Vertical: &QSH-090-01-x-D
+  description: *QStrip_desc
+  datasheet: 'http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-xx-footprint.pdf'
+  tags: 'connector Samtec QSH mezzanine socket vertical'
+  layout: &QSH_layout
+    type: 'Socket'
+    width: 61.38
+    height: 7.24
+    silk_offset: 0.25
+  banks: {n: 3, pins: 60, diff: 0, space: 20.0, width: 15.89, height: 3.81}
+  pins: &QSH_pins
+    signal: {pitch: 0.5, y: 2.67, width: 0.279, height: 2.27}
+    ground: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
+
+Samtec_QSH-090-01-x-D-A_P0.5mm_Vertical:
+  <<: *QSH-090-01-x-D
+  holes:
+    - {drill: 1.02, space: 61.38, y: 2.03}
+
+Samtec_QSH-090-01-x-D-LC_P0.5mm_Vertical:
+  <<: *QSH-090-01-x-D
+  holes:
+    - {drill: 1.19, space: 61.38, y: 2.03}
+
+Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
+  pn: 'ASP-122952-01'
+  description: >-
+    Samtec {pn:s} HSMC Host {type:s};
+    modified QSH-090-01-L-D-A, Bank 1 differential ({ds:s})
+  datasheet: 'http://suddendocs.samtec.com/prints/asp-122953-01-mkt.pdf'
+  tags: 'connector Samtec HSMC host socket mezzanine vertical differential'
+  layout: *QSH_layout
+  banks: {n: 3, pins: 60, diff: 1, space: 20.0, width: 15.89, height: 3.81}
+  pins: *QSH_pins
+  holes:
+    - {drill: 1.02, space: 61.38, y: 2.03}
+
+# QSH family; 3 banks; differential
+Samtec_QSH-060-01-x-D-DP_P0.5mm_Vertical: &QSH-060-01-x-D-DP
+  description: *QPairs_desc
+  datasheet: 'http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-dp-xx-footprint.pdf'
+  tags: 'connector Samtec QSH mezzanine socket vertical differential'
+  layout: *QSH_layout
+  banks: {n: 3, pins: 60, diff: 3, space: 20.0, width: 15.89, height: 3.81}
+  pins: *QSH_pins
+
+Samtec_QSH-060-01-x-D-DP-A_P0.5mm_Vertical:
+  <<: *QSH-060-01-x-D-DP
+  holes:
+    - {drill: 1.02, space: 61.38, y: 2.03}
+
+Samtec_QSH-060-01-x-D-DP-LC_P0.5mm_Vertical:
+  <<: *QSH-060-01-x-D-DP
+  holes:
+    - {drill: 1.19, space: 61.38, y: 2.03}

From e7fe7ecfb343414a9450a262d37f502e9741d894 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Wed, 17 Jul 2019 22:14:24 -0700
Subject: [PATCH 03/62] Minor modification to make
 KicadFileHandler._serialize_LinePoints() support rotations

---
 KicadModTree/KicadFileHandler.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/KicadModTree/KicadFileHandler.py b/KicadModTree/KicadFileHandler.py
index 4372dea1d..dd6cbaaba 100644
--- a/KicadModTree/KicadFileHandler.py
+++ b/KicadModTree/KicadFileHandler.py
@@ -204,8 +204,8 @@ def _serialize_Circle(self, node):
         return sexpr
 
     def _serialize_LinePoints(self, node):
-        start_pos = node.getRealPosition(node.start_pos)
-        end_pos = node.getRealPosition(node.end_pos)
+        start_pos = node.getRealPosition(node.start_pos, 0)[0]
+        end_pos = node.getRealPosition(node.end_pos, 0)[0]
         return [
                 ['start', start_pos.x, start_pos.y],
                 ['end', end_pos.x, end_pos.y]

From bf2d404d4d1d7ddecb317aec647b941d79aa0e80 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Wed, 17 Jul 2019 22:25:58 -0700
Subject: [PATCH 04/62] Finish F.Fab layer drawing code in QStrip_Vertical.py

---
 scripts/Connector/Connector_Samtec/QStrip_Vertical.py | 11 +++++++++++
 .../Connector/Connector_Samtec/QStrip_Vertical.yaml   | 10 +++++-----
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
index c197ebd8e..a77a37610 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
@@ -82,6 +82,8 @@ def generate_one_footprint(param, config, library):
     # Bank parameters
     banks  = param['banks']['n']
     bank_x = param['banks']['space']
+    bank_w = param['banks']['width']
+    bank_h = param['banks']['height']
     pins_per_bank = param['banks']['pins']
 
     ############################################################################
@@ -230,6 +232,15 @@ def generate_one_footprint(param, config, library):
                               layer = "F.Fab",
                               close = False,
                               line_width = fab_line))
+
+    # Draw bank outlines
+    for b in range(banks):
+        mid = bank1_mid + b*bank_x
+        fp.append(RectLine(start = (mid-bank_w/2, -bank_h/2),
+                           end   = (mid+bank_w/2,  bank_h/2),
+                           layer = "F.Fab",
+                           width = fab_line))
+                           
         
     ############################################################################
     # Metadata
diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
index ea6f08321..a9eace063 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
@@ -67,12 +67,12 @@ Samtec_QSH-090-01-x-D_P0.5mm_Vertical: &QSH-090-01-x-D
 Samtec_QSH-090-01-x-D-A_P0.5mm_Vertical:
   <<: *QSH-090-01-x-D
   holes:
-    - {drill: 1.02, space: 61.38, y: 2.03}
+    - {drill: 1.02, space: 60.13, y: 2.03}
 
 Samtec_QSH-090-01-x-D-LC_P0.5mm_Vertical:
   <<: *QSH-090-01-x-D
   holes:
-    - {drill: 1.19, space: 61.38, y: 2.03}
+    - {drill: 1.19, space: 60.13, y: 2.03}
 
 Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
   pn: 'ASP-122952-01'
@@ -85,7 +85,7 @@ Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
   banks: {n: 3, pins: 60, diff: 1, space: 20.0, width: 15.89, height: 3.81}
   pins: *QSH_pins
   holes:
-    - {drill: 1.02, space: 61.38, y: 2.03}
+    - {drill: 1.02, space: 60.13, y: 2.03}
 
 # QSH family; 3 banks; differential
 Samtec_QSH-060-01-x-D-DP_P0.5mm_Vertical: &QSH-060-01-x-D-DP
@@ -99,9 +99,9 @@ Samtec_QSH-060-01-x-D-DP_P0.5mm_Vertical: &QSH-060-01-x-D-DP
 Samtec_QSH-060-01-x-D-DP-A_P0.5mm_Vertical:
   <<: *QSH-060-01-x-D-DP
   holes:
-    - {drill: 1.02, space: 61.38, y: 2.03}
+    - {drill: 1.02, space: 60.13, y: 2.03}
 
 Samtec_QSH-060-01-x-D-DP-LC_P0.5mm_Vertical:
   <<: *QSH-060-01-x-D-DP
   holes:
-    - {drill: 1.19, space: 61.38, y: 2.03}
+    - {drill: 1.19, space: 60.13, y: 2.03}

From 40bd95336cb72f400a0bcef0ec012d2d8ed41aa8 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Fri, 19 Jul 2019 13:28:17 -0700
Subject: [PATCH 05/62] Add fab and silkscreen drawing code to
 QStrip_Vertical.py; Update QStrip_Vertical.yaml structure/parameters

---
 .../Connector_Samtec/QStrip_Vertical.py       | 120 ++++++--
 .../Connector_Samtec/QStrip_Vertical.yaml     | 259 ++++++++++++++----
 2 files changed, 306 insertions(+), 73 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
index a77a37610..15b78d9d3 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
@@ -8,12 +8,12 @@
   description: 'Brief description of the footprint'
   datasheet: 'URL to footprint datasheet'
   tags: 'KiCad tags go here'
+  add-tags: 'more tags' # [optional], used to extend the tag list
   layout:
     type: '(Terminal|Socket)'
-    size: # Overall connector dimensions
-      - !!float mm # width
-      - !!float mm # height
-    silk_offset: mm # silkscreen offset from the F.Fab outline
+    width: !!float mm # width
+    height: !!float mm # height
+  width: !!float mm # [optional] overrides layout::width
   banks:
     n: !!int # number of banks in the connector
     pins: !!int even # number of pins in a bank
@@ -49,6 +49,7 @@
 import sys
 import os
 import argparse
+from copy import deepcopy
 import math
 import yaml
 
@@ -139,16 +140,16 @@ def generate_one_footprint(param, config, library):
     gnd_space_out = param['pins']['ground']['space'][0] / 2
     gnd_space_in  = param['pins']['ground']['space'][1] / 2
     gnd_space = [-gnd_space_out, -gnd_space_in, gnd_space_in, gnd_space_out]
-    gnd_size  = [Vector2D(gnd_width_out, gnd_height),
-                 Vector2D(gnd_width_in,  gnd_height),
-                 Vector2D(gnd_width_in,  gnd_height),
-                 Vector2D(gnd_width_out, gnd_height)]
+    gnd_size  = [(gnd_width_out, gnd_height),
+                 (gnd_width_in,  gnd_height),
+                 (gnd_width_in,  gnd_height),
+                 (gnd_width_out, gnd_height)]
     # Place ground plane pads
     for b in range(banks):
         mid = bank1_mid + b*bank_x # Bank midpoint
         for i in range(len(gnd_space)):
             pad = Pad(number = str(n),
-                      at = Vector2D(mid+gnd_space[i], 0),
+                      at = (mid+gnd_space[i], 0),
                       size = gnd_size[i],
                       type = Pad.TYPE_SMT,
                       layers = Pad.LAYERS_SMT,
@@ -174,7 +175,7 @@ def generate_one_footprint(param, config, library):
     # Fabrication layer: F.Fab
     fab_line = config['fab_line_width']
     fab_mark = pitch #config['fab_pin1_marker_length']
-    fab_width = param['layout']['width']
+    fab_width = param['layout']['width'] if 'width' not in param else param['width']
     fab_height = param['layout']['height']
     fab_y = fab_height / 2
     lEdge = -fab_width / 2
@@ -182,14 +183,15 @@ def generate_one_footprint(param, config, library):
     chamfer = fab_height / 4 # 1/4 connector height, cosmetic only
 
     if mode == 'Terminal':
-        # End outlines
-        points = [(lEdge, -fab_y),
-                  (lEdge, fab_y-chamfer),
-                  (lEdge+chamfer, fab_y)]
-        fp.append(PolygoneLine(nodes = points,
+        # Left end outline
+        lEnd = [(lEdge, -fab_y),
+                (lEdge, fab_y-chamfer),
+                (lEdge+chamfer, fab_y)]
+        fp.append(PolygoneLine(nodes = lEnd,
                                layer = "F.Fab",
                                width = fab_line))
-        fp.append(PolygoneLine(nodes = points,
+        # Right end outline (mirrors left end)
+        fp.append(PolygoneLine(nodes = lEnd,
                                layer = "F.Fab",
                                width = fab_line,
                                x_mirror = 0))
@@ -241,7 +243,70 @@ def generate_one_footprint(param, config, library):
                            layer = "F.Fab",
                            width = fab_line))
                            
-        
+    
+    ############################################################################
+    # Silkscreen: F.SilkS
+    #silk_offset = param['layout']['silk-offset']
+    silk_offset_fab = config['silk_fab_offset']
+    silk_pad = config['silk_pad_clearance'] + pad_w/2
+    silk_line = config['silk_line_width']
+    silk_y = fab_y + silk_offset_fab
+    silk_lEdge = lEdge - silk_offset_fab
+    silk_rEdge = rEdge + silk_offset_fab
+    silk_chamfer = chamfer + silk_offset_fab/2
+    silk_pin1 = pin1.x - silk_pad
+    silk_lEnd = []
+    silk_rEnd = []
+    
+    if mode == 'Terminal':
+        # Polygon left end outline points
+        silk_lEnd = [{'x': silk_pin1,  'y': -silk_y},
+                     {'x': silk_lEdge, 'y': -silk_y},
+                     {'x': silk_lEdge, 'y': silk_y-silk_chamfer},
+                     {'x': silk_lEdge+silk_chamfer, 'y': silk_y},
+                     {'x': silk_pin1,  'y': silk_y}]
+        # Pin 1 indicator
+        fp.append(Line(start = (silk_pin1, pin1.y - pad_h/2),
+                       end   = (silk_pin1, -silk_y),
+                       layer = "F.SilkS",
+                       width = silk_line))
+    elif mode == 'Socket':
+        # Left end outline points
+        silk_lEnd = [{'x': silk_pin1,  'y':  silk_y},
+                     {'x': silk_lEdge, 'y':  silk_y},
+                     {'x': silk_lEdge, 'y': -silk_y},
+                     {'x': silk_pin1,  'y': -silk_y}]
+        # Pin 1 indicator
+        r = pad_w/4
+        fp.append(Circle(center = (pin1.x, pin1.y + pad_h/2 + r + silk_pad),
+                         radius = r,
+                         layer  = "F.SilkS",
+                         width  = 2*r))
+
+    # Generate right end outline
+    silk_rEnd = deepcopy(silk_lEnd)
+    # Mirror about x axis
+    for i in range(len(silk_rEnd)):
+        silk_rEnd[i]['x'] = -silk_rEnd[i]['x']
+    # Define right outline inner offset from the last pin
+    # (if the last bank is differential, it does not perfectly mirror the first)
+    silk_rEnd[0]['x'] = silk_rEnd[-1]['x'] = pin[-1][-1].x + silk_pad
+
+    # Draw left and right end outlines
+    fp.append(PolygoneLine(nodes = silk_lEnd,
+                           layer = "F.SilkS",
+                           width = silk_line))
+    fp.append(PolygoneLine(nodes = silk_rEnd,
+                           layer = "F.SilkS",
+                           width = silk_line))
+
+    # Draw outlines between banks
+    for b in range(banks-1):
+        fp.extend([Line(start = (pin[b][-1].x  + silk_pad, m*silk_y),
+                        end   = (pin[b+1][0].x - silk_pad, m*silk_y),
+                        layer = "F.SilkS",
+                        width = silk_line) for m in (-1,1)])
+    
     ############################################################################
     # Metadata
     
@@ -266,9 +331,13 @@ def generate_one_footprint(param, config, library):
                        pitch = pitch,
                        banks = banks,
                        pins = pins_or_pairs)
-    
     fp.setDescription(desc)
-    fp.setTags(param['tags'])
+
+    # Tags
+    tags = param['tags']
+    if 'add-tags' in param:
+        tags += ' ' + param['add-tags']
+    fp.setTags(tags)
 
     ############################################################################
     # Write kicad_mod file
@@ -321,14 +390,17 @@ def generate_one_footprint(param, config, library):
                     print(path, "empty, skipping...")
                     continue
 
-                for fp in footprints:
-                    print("  - Generate {}.kicad_mod".format(fp))
-                    fp_params = footprints.get(fp)
+                if '_local' in footprints:
+                    del footprints['_local']
+                
+                for fp_name in footprints:
+                    print("  - Generate {}.kicad_mod".format(fp_name))
+                    fp_params = footprints.get(fp_name)
                     
                     if 'name' in fp_params:
-                        print("WARNING: setting 'name' to", fp)
+                        print("WARNING: setting 'name' to", fp_name)
                     
-                    fp_params['name'] = fp
+                    fp_params['name'] = fp_name
                     generate_one_footprint(fp_params, config, args.library)
             except yaml.YAMLError as exc:
                 print(exc)
diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
index a9eace063..ed3b7e848 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
@@ -1,64 +1,192 @@
-# QTH family; 3 Banks
-Samtec_QTH-090-01-x-D_P0.5mm_Vertical: &QTH-090-01-x-D
-  description: &QStrip_desc >-
+_local:
+  - &QStrip_desc >-
     Samtec {pn:s} {pitch:1.2f}mm Q Strip® High-Speed Ground Plane {type:s} Strip;
     {banks:d} banks, {pins:d} pins/bank ({ds:s})
+  - &QPairs_desc >-
+    Samtec {pn:s} {pitch:1.2f}mm Q Pairs® High-Speed Ground Plane {type:s} Strip,
+    Differential Pair; {banks:d} banks, {pins:d} pairs/bank ({ds:s})
+  - &QStrip_tags 'connector Samtec QStrip mezzanine terminal vertical'
+  - &QPairs_tags 'connector Samtec QPairs mezzanine terminal vertical differential'
+
+################################################################################
+# QTH family; 1 bank
+Samtec_QTH-030-01-x-D_P0.5mm_Vertical: &QTH-030-01-x-D
+  description: *QStrip_desc
   datasheet: 'http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf'
-  tags: 'connector Samtec HSMC QTH mezzanine terminal vertical'
-  layout: &QTH_layout
-    type: 'Terminal'
-    width: 60.0
-    height: 5.97
-    silk_offset: 0.25
-  banks: {n: 3, pins: 60, diff: 0, space: 20.0, width: 16.4, height: 3.9}
+  tags: 'connector Samtec QStrip mezzanine terminal vertical'
+  layout: {type: 'Terminal', width: 20.0, height: 5.97}
+  banks: {n: 1, pins: 60, diff: 0, space: 20.0, width: 16.4, height: 3.9}
   pins: &QTH_pins
     signal: {pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
     ground: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
 
-Samtec_QTH-090-01-x-D-A_P0.5mm_Vertical:
-  <<: *QTH-090-01-x-D
+Samtec_QTH-030-01-x-D-A_P0.5mm_Vertical:
+  <<: *QTH-030-01-x-D
+  add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 58.48, y: -2.03}
+    - {drill: 1.02, space: 18.48, y: -2.03}
 
-Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical:
-  pn: 'ASP-122952-01'
-  description: >-
-    Samtec {pn:s} HSMC Card {type:s};
-    modified QTH-090-01-L-D-A, Bank 1 differential ({ds:s})
-  datasheet: 'http://suddendocs.samtec.com/prints/asp-122952-01-mkt.pdf'
-  tags: 'connector Samtec HSMC card terminal mezzanine vertical differential'
-  layout: *QTH_layout
-  banks: {n: 3, pins: 60, diff: 1, space: 20.0, width: 16.4, height: 3.9}
+Samtec_QTH-030-01-x-D-L_P0.5mm_Vertical:
+  <<: *QTH-030-01-x-D
+  add-tags: 'locking'
+  width: 23.0
+  holes:
+    - {drill: 0.81, ring: 0.5, space: 21.69, y: -0.508}
+
+Samtec_QTH-030-01-x-D-A-L_P0.5mm_Vertical:
+  <<: *QTH-030-01-x-D
+  add-tags: 'alignment-pins locking'
+  width: 23.0
+  holes:
+    - {drill: 1.02, space: 18.48, y: -2.03}
+    - {drill: 0.81, ring: 0.5, space: 21.69, y: -0.508}
+
+# QTH family; 1 bank; differential
+Samtec_QTH-020-01-x-D-DP_P0.5mm_Vertical: &QTH-020-01-x-D-DP
+  description: *QPairs_desc
+  datasheet: 'http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf'
+  tags: 'connector Samtec QPairs mezzanine terminal vertical differential'
+  layout: {type: 'Terminal', width: 20.0, height: 5.97}
+  banks: {n: 1, pins: 60, diff: 1, space: 20.0, width: 16.4, height: 3.9}
+  pins: *QTH_pins
+
+Samtec_QTH-020-01-x-D-DP-A_P0.5mm_Vertical:
+  <<: *QTH-020-01-x-D-DP
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 18.48, y: -2.03}
+
+Samtec_QTH-020-01-x-D-DP-L_P0.5mm_Vertical:
+  <<: *QTH-020-01-x-D-DP
+  add-tags: 'locking'
+  width: 23.0
+  holes:
+    - {drill: 0.81, ring: 0.5, space: 21.69, y: -0.508}
+
+Samtec_QTH-020-01-x-D-DP-A-L_P0.5mm_Vertical:
+  <<: *QTH-020-01-x-D-DP
+  add-tags: 'alignment-pins locking'
+  width: 23.0
+  holes:
+    - {drill: 1.02, space: 18.48, y: -2.03}
+    - {drill: 0.81, ring: 0.5, space: 21.69, y: -0.508}
+
+# QTH family; 2 banks
+Samtec_QTH-060-01-x-D_P0.5mm_Vertical: &QTH-060-01-x-D
+  description: *QStrip_desc
+  datasheet: 'http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf'
+  tags: 'connector Samtec QStrip mezzanine terminal vertical'
+  layout: {type: 'Terminal', width: 40.0, height: 5.97}
+  banks: {n: 2, pins: 60, diff: 0, space: 20.0, width: 16.4, height: 3.9}
+  pins: *QTH_pins
+
+Samtec_QTH-060-01-x-D-A_P0.5mm_Vertical:
+  <<: *QTH-060-01-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 38.48, y: -2.03}
+
+Samtec_QTH-060-01-x-D-L_P0.5mm_Vertical:
+  <<: *QTH-060-01-x-D
+  add-tags: 'locking'
+  width: 43.0
+  holes:
+    - {drill: 0.81, ring: 0.5, space: 41.69, y: -0.508}
+
+Samtec_QTH-060-01-x-D-A-L_P0.5mm_Vertical:
+  <<: *QTH-060-01-x-D
+  add-tags: 'alignment-pins locking'
+  width: 43.0
+  holes:
+    - {drill: 1.02, space: 38.48, y: -2.03}
+    - {drill: 0.81, ring: 0.5, space: 41.69, y: -0.508}
+
+# QTH family; 2 banks; differential
+Samtec_QTH-040-01-x-D-DP_P0.5mm_Vertical: &QTH-040-01-x-D-DP
+  description: *QPairs_desc
+  datasheet: 'http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf'
+  tags: 'connector Samtec QPairs mezzanine terminal vertical differential'
+  layout: {type: 'Terminal', width: 40.0, height: 5.97}
+  banks: {n: 2, pins: 60, diff: 2, space: 20.0, width: 16.4, height: 3.9}
+  pins: *QTH_pins
+
+Samtec_QTH-040-01-x-D-DP-A_P0.5mm_Vertical:
+  <<: *QTH-040-01-x-D-DP
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 38.48, y: -2.03}
+
+Samtec_QTH-040-01-x-D-DP-L_P0.5mm_Vertical:
+  <<: *QTH-040-01-x-D-DP
+  add-tags: 'locking'
+  width: 43.0
+  holes:
+    - {drill: 0.81, ring: 0.5, space: 41.69, y: -0.508}
+
+Samtec_QTH-040-01-x-D-DP-A-L_P0.5mm_Vertical:
+  <<: *QTH-040-01-x-D-DP
+  add-tags: 'alignment-pins locking'
+  width: 43.0
+  holes:
+    - {drill: 1.02, space: 38.48, y: -2.03}
+    - {drill: 0.81, ring: 0.5, space: 41.69, y: -0.508}
+
+# QTH family; 3 banks
+Samtec_QTH-090-01-x-D_P0.5mm_Vertical: &QTH-090-01-x-D
+  description: *QStrip_desc
+  datasheet: 'http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf'
+  tags: 'connector Samtec QStrip mezzanine terminal vertical'
+  layout: {type: 'Terminal', width: 60.0, height: 5.97}
+  banks: {n: 3, pins: 60, diff: 0, space: 20.0, width: 16.4, height: 3.9}
   pins: *QTH_pins
+
+Samtec_QTH-090-01-x-D-A_P0.5mm_Vertical:
+  <<: *QTH-090-01-x-D
+  add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 58.48, y: -2.03}
 
 # QTH family; 3 banks; differential
 Samtec_QTH-060-01-x-D-DP_P0.5mm_Vertical: &QTH-060-01-x-D-DP
-  description: &QPairs_desc >-
-    Samtec {pn:s} {pitch:1.2f}mm Q Pairs® High-Speed Ground Plane {type:s} Strip,
-    Differential Pair; {banks:d} banks, {pins:d} pairs/bank ({ds:s})
+  description: *QPairs_desc
   datasheet: 'http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf'
-  tags: 'connector Samtec QTH mezzanine terminal vertical differential'
-  layout: *QTH_layout
+  tags: 'connector Samtec QPairs mezzanine terminal vertical differential'
+  layout: {type: 'Terminal', width: 60.0, height: 5.97}
   banks: {n: 3, pins: 60, diff: 3, space: 20.0, width: 16.4, height: 3.9}
   pins: *QTH_pins
 
 Samtec_QTH-060-01-x-D-DP-A_P0.5mm_Vertical:
   <<: *QTH-060-01-x-D-DP
+  add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 58.48, y: -2.03}
 
-# QSH family; 3 Banks
+# QTH family; 3 banks; specialized
+Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical:
+  pn: 'ASP-122952-01'
+  description: >-
+    Samtec {pn:s} HSMC Card {type:s}; modified QTH-090-01-L-D-A,
+    Bank 1 differential ({ds:s})
+  datasheet: 'http://suddendocs.samtec.com/prints/asp-122952-01-mkt.pdf'
+  tags: 'connector Samtec HSMC card terminal mezzanine vertical differential alignment-pins'
+  layout: {type: 'Terminal', width: 60.0, height: 5.97}
+  banks: {n: 3, pins: 60, diff: 1, space: 20.0, width: 16.4, height: 3.9}
+  pins: *QTH_pins
+  holes:
+    - {drill: 1.02, space: 58.48, y: -2.03}
+
+################################################################################
+# QSH family; 1 bank
+# QSH family; 1 bank; differential
+# QSH family; 2 banks
+# QSH family; 2 banks; differential
+
+# QSH family; 3 banks
 Samtec_QSH-090-01-x-D_P0.5mm_Vertical: &QSH-090-01-x-D
   description: *QStrip_desc
   datasheet: 'http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-xx-footprint.pdf'
-  tags: 'connector Samtec QSH mezzanine socket vertical'
-  layout: &QSH_layout
-    type: 'Socket'
-    width: 61.38
-    height: 7.24
-    silk_offset: 0.25
+  tags: 'connector Samtec QStrip mezzanine socket vertical'
+  layout: {type: 'Socket', width: 61.38, height: 7.24}
   banks: {n: 3, pins: 60, diff: 0, space: 20.0, width: 15.89, height: 3.81}
   pins: &QSH_pins
     signal: {pitch: 0.5, y: 2.67, width: 0.279, height: 2.27}
@@ -74,25 +202,12 @@ Samtec_QSH-090-01-x-D-LC_P0.5mm_Vertical:
   holes:
     - {drill: 1.19, space: 60.13, y: 2.03}
 
-Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
-  pn: 'ASP-122952-01'
-  description: >-
-    Samtec {pn:s} HSMC Host {type:s};
-    modified QSH-090-01-L-D-A, Bank 1 differential ({ds:s})
-  datasheet: 'http://suddendocs.samtec.com/prints/asp-122953-01-mkt.pdf'
-  tags: 'connector Samtec HSMC host socket mezzanine vertical differential'
-  layout: *QSH_layout
-  banks: {n: 3, pins: 60, diff: 1, space: 20.0, width: 15.89, height: 3.81}
-  pins: *QSH_pins
-  holes:
-    - {drill: 1.02, space: 60.13, y: 2.03}
-
 # QSH family; 3 banks; differential
 Samtec_QSH-060-01-x-D-DP_P0.5mm_Vertical: &QSH-060-01-x-D-DP
   description: *QPairs_desc
   datasheet: 'http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-dp-xx-footprint.pdf'
-  tags: 'connector Samtec QSH mezzanine socket vertical differential'
-  layout: *QSH_layout
+  tags: 'connector Samtec mezzanine socket vertical differential'
+  layout: {type: 'Socket', width: 61.38, height: 7.24}
   banks: {n: 3, pins: 60, diff: 3, space: 20.0, width: 15.89, height: 3.81}
   pins: *QSH_pins
 
@@ -105,3 +220,49 @@ Samtec_QSH-060-01-x-D-DP-LC_P0.5mm_Vertical:
   <<: *QSH-060-01-x-D-DP
   holes:
     - {drill: 1.19, space: 60.13, y: 2.03}
+
+# QSH family; 3 banks; specialized
+Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
+  pn: 'ASP-122952-01'
+  description: >-
+    Samtec {pn:s} HSMC Host {type:s}; modified QSH-090-01-L-D-A,
+    Bank 1 differential ({ds:s})
+  datasheet: 'http://suddendocs.samtec.com/prints/asp-122953-01-mkt.pdf'
+  tags: 'connector Samtec HSMC host socket mezzanine vertical differential'
+  layout: {type: 'Socket', width: 61.38, height: 7.24}
+  banks: {n: 3, pins: 60, diff: 1, space: 20.0, width: 15.89, height: 3.81}
+  pins: *QSH_pins
+  holes:
+    - {drill: 1.02, space: 60.13, y: 2.03}
+
+################################################################################
+# QTS family; 1 bank
+# QTS family; 1 bank; differential
+# QTS family; 2 banks
+# QTS family; 2 banks; differential
+# QTS family; 3 banks
+# QTS family; 3 banks; differential
+
+################################################################################
+# QSS family; 1 bank
+# QSS family; 1 bank; differential
+# QSS family; 2 banks
+# QSS family; 2 banks; differential
+# QSS family; 3 banks
+# QSS family; 3 banks; differential
+
+################################################################################
+# QTE family; 1 bank
+# QTE family; 1 bank; differential
+# QTE family; 2 banks
+# QTE family; 2 banks; differential
+# QTE family; 3 banks
+# QTE family; 3 banks; differential
+
+################################################################################
+# QSE family; 1 bank
+# QSE family; 1 bank; differential
+# QSE family; 2 banks
+# QSE family; 2 banks; differential
+# QSE family; 3 banks
+# QSE family; 3 banks; differential

From fb31e29e79f180aae0ce2ff7d1a325a61dc2e09d Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Fri, 19 Jul 2019 15:41:39 -0700
Subject: [PATCH 06/62] Add oval hole capability to QStrip_Vertical.py

---
 .../Connector_Samtec/QStrip_Vertical.py       | 66 +++++++++++++------
 1 file changed, 46 insertions(+), 20 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
index 15b78d9d3..bb21d7a54 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
@@ -39,7 +39,7 @@
     - # Hole spec. 1
       name: "" # [optional] name/number for plated holes
       drill: !!float mm # drill diameter
-      ring: !!float mm # [optional] annular ring
+      pad: !!float mm # [optional] PTH pad diameter
       space: !!float mm # distance between holes mirrored about the x-axis
       y: !!float mm # vertical offset
     - # Hole spec. 2
@@ -55,8 +55,11 @@
 
 # Load parent path of KicadModTree
 sys.path.append(os.path.join(sys.path[0], "..", "..", ".."))
+sys.path.append(os.path.join(sys.path[0], "..", "..", "tools"))
 
 from KicadModTree import *
+from footprint_text_fields import addTextFields
+from helpers import *
 
 def markerArrow(x, y, width, line_width, layer, angle=0, close=True):
     node = Node()
@@ -161,26 +164,27 @@ def generate_one_footprint(param, config, library):
     # Holes
     if 'holes' in param:
         for p in param['holes']:
-            h = [Pad(number = config['mounting_pad_number'] if 'ring' in p else "",
-                     at = (m*p['space']/2, p['y']),
-                     drill = p['drill'],
-                     size = p['drill']+p['ring'] if 'ring' in p else p['drill'],
-                     type = Pad.TYPE_THT if 'ring' in p else Pad.TYPE_NPTH,
-                     layers = Pad.LAYERS_THT if 'ring' in p else Pad.LAYERS_NPTH,
-                     shape = Pad.SHAPE_CIRCLE) for m in (-1,1)]
-            fp.append(h[0])
-            fp.append(h[1])
+            drill = p['drill']
+            shape = Pad.SHAPE_CIRCLE if type(drill) is float else Pad.SHAPE_OVAL
+            h = [Pad(number = "MP" if 'pad' in p else "",
+                     at     = (m*p['space']/2, p['y']),
+                     drill  = drill,
+                     size   = p['pad'] if 'pad' in p else drill,
+                     type   = Pad.TYPE_THT if 'pad' in p else Pad.TYPE_NPTH,
+                     layers = Pad.LAYERS_THT if 'pad' in p else Pad.LAYERS_NPTH,
+                     shape  = shape) for m in (-1,1)]
+            fp.extend(h)
 
     ############################################################################
     # Fabrication layer: F.Fab
     fab_line = config['fab_line_width']
     fab_mark = pitch #config['fab_pin1_marker_length']
-    fab_width = param['layout']['width'] if 'width' not in param else param['width']
-    fab_height = param['layout']['height']
-    fab_y = fab_height / 2
-    lEdge = -fab_width / 2
-    rEdge = lEdge + fab_width
-    chamfer = fab_height / 4 # 1/4 connector height, cosmetic only
+    fab_w = param['layout']['width'] if 'width' not in param else param['width']
+    fab_h = param['layout']['height']
+    fab_y = fab_h / 2
+    lEdge = -fab_w / 2
+    rEdge = lEdge + fab_w
+    chamfer = fab_h / 4 # 1/4 connector height, cosmetic only
 
     if mode == 'Terminal':
         # Left end outline
@@ -206,7 +210,7 @@ def generate_one_footprint(param, config, library):
                        width = fab_line))
         # Pin 1 marker
         fp.append(markerArrow(x = pin1.x,
-                              y = (fab_mark-fab_height) / 2,
+                              y = (fab_mark-fab_h) / 2,
                               width = fab_mark,
                               angle = 180,
                               layer = "F.Fab",
@@ -229,7 +233,7 @@ def generate_one_footprint(param, config, library):
                        width = fab_line))
         # Pin 1 marker
         fp.append(markerArrow(x = pin1.x,
-                              y = (fab_height-fab_mark) / 2,
+                              y = (fab_h-fab_mark) / 2,
                               width = fab_mark,
                               layer = "F.Fab",
                               close = False,
@@ -255,8 +259,6 @@ def generate_one_footprint(param, config, library):
     silk_rEdge = rEdge + silk_offset_fab
     silk_chamfer = chamfer + silk_offset_fab/2
     silk_pin1 = pin1.x - silk_pad
-    silk_lEnd = []
-    silk_rEnd = []
     
     if mode == 'Terminal':
         # Polygon left end outline points
@@ -306,9 +308,33 @@ def generate_one_footprint(param, config, library):
                         end   = (pin[b+1][0].x - silk_pad, m*silk_y),
                         layer = "F.SilkS",
                         width = silk_line) for m in (-1,1)])
+
+    ############################################################################
+    # Courtyard: F.CrtYd
+    court_line = config['courtyard_line_width']
+    court_grid = config['courtyard_grid']
+    court_offset = config['courtyard_offset']['connector']
+
+    court_x = roundToBase(fab_w/2 + court_offset, court_grid)
+    court_y = roundToBase(max(fab_y, pad_y + pad_h/2) + court_offset, court_grid)
+
+    fp.append(RectLine(start  = (-court_x, -court_y),
+                       end    = ( court_x,  court_y),
+                       layer  = "F.CrtYd",
+                       width  = court_line))
     
     ############################################################################
     # Metadata
+    text_y = court_y + 1.0
+    fp.append(Text(type = 'reference', text = 'REF**',
+                   at = (0, -text_y),
+                   layer = "F.SilkS"))
+    fp.append(Text(type = 'user', text = '%R',
+                   at = (0, -text_y),
+                   layer = "F.Fab"))
+    fp.append(Text(type = 'value', text=param['name'],
+                   at = (0, text_y),
+                   layer='F.Fab'))
     
     # Part number
     if 'pn' in param:

From bf250a0e24df716cf4851d09e262ea819b2f1ba5 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Fri, 19 Jul 2019 15:50:47 -0700
Subject: [PATCH 07/62] Finish adding QSH and QTH specifications to
 QStrip_Vertical.yaml

---
 .../Connector_Samtec/QStrip_Vertical.yaml     | 151 +++++++++++++-----
 1 file changed, 114 insertions(+), 37 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
index ed3b7e848..2bea72860 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
@@ -5,15 +5,13 @@ _local:
   - &QPairs_desc >-
     Samtec {pn:s} {pitch:1.2f}mm Q Pairs® High-Speed Ground Plane {type:s} Strip,
     Differential Pair; {banks:d} banks, {pins:d} pairs/bank ({ds:s})
-  - &QStrip_tags 'connector Samtec QStrip mezzanine terminal vertical'
-  - &QPairs_tags 'connector Samtec QPairs mezzanine terminal vertical differential'
 
 ################################################################################
 # QTH family; 1 bank
 Samtec_QTH-030-01-x-D_P0.5mm_Vertical: &QTH-030-01-x-D
   description: *QStrip_desc
-  datasheet: 'http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf'
-  tags: 'connector Samtec QStrip mezzanine terminal vertical'
+  datasheet: &QTH_ds 'http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf'
+  tags: &QTH_tags 'connector Samtec QStrip QTH mezzanine terminal vertical'
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
   banks: {n: 1, pins: 60, diff: 0, space: 20.0, width: 16.4, height: 3.9}
   pins: &QTH_pins
@@ -28,24 +26,24 @@ Samtec_QTH-030-01-x-D-A_P0.5mm_Vertical:
 
 Samtec_QTH-030-01-x-D-L_P0.5mm_Vertical:
   <<: *QTH-030-01-x-D
-  add-tags: 'locking'
+  add-tags: 'latching'
   width: 23.0
   holes:
-    - {drill: 0.81, ring: 0.5, space: 21.69, y: -0.508}
+    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
 
 Samtec_QTH-030-01-x-D-A-L_P0.5mm_Vertical:
   <<: *QTH-030-01-x-D
-  add-tags: 'alignment-pins locking'
+  add-tags: 'alignment-pins latching'
   width: 23.0
   holes:
     - {drill: 1.02, space: 18.48, y: -2.03}
-    - {drill: 0.81, ring: 0.5, space: 21.69, y: -0.508}
+    - {drill: 0.8, pad: 1.5, space: 21.69, y: -0.508}
 
 # QTH family; 1 bank; differential
 Samtec_QTH-020-01-x-D-DP_P0.5mm_Vertical: &QTH-020-01-x-D-DP
   description: *QPairs_desc
-  datasheet: 'http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf'
-  tags: 'connector Samtec QPairs mezzanine terminal vertical differential'
+  datasheet: &QTH-DP_ds 'http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf'
+  tags: &QTH-DP_tags 'connector Samtec QPairs QTH mezzanine terminal vertical differential'
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
   banks: {n: 1, pins: 60, diff: 1, space: 20.0, width: 16.4, height: 3.9}
   pins: *QTH_pins
@@ -58,24 +56,24 @@ Samtec_QTH-020-01-x-D-DP-A_P0.5mm_Vertical:
 
 Samtec_QTH-020-01-x-D-DP-L_P0.5mm_Vertical:
   <<: *QTH-020-01-x-D-DP
-  add-tags: 'locking'
+  add-tags: 'latching'
   width: 23.0
   holes:
-    - {drill: 0.81, ring: 0.5, space: 21.69, y: -0.508}
+    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
 
 Samtec_QTH-020-01-x-D-DP-A-L_P0.5mm_Vertical:
   <<: *QTH-020-01-x-D-DP
-  add-tags: 'alignment-pins locking'
+  add-tags: 'alignment-pins latching'
   width: 23.0
   holes:
     - {drill: 1.02, space: 18.48, y: -2.03}
-    - {drill: 0.81, ring: 0.5, space: 21.69, y: -0.508}
+    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
 
 # QTH family; 2 banks
 Samtec_QTH-060-01-x-D_P0.5mm_Vertical: &QTH-060-01-x-D
   description: *QStrip_desc
-  datasheet: 'http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf'
-  tags: 'connector Samtec QStrip mezzanine terminal vertical'
+  datasheet: *QTH_ds
+  tags: *QTH_tags
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
   banks: {n: 2, pins: 60, diff: 0, space: 20.0, width: 16.4, height: 3.9}
   pins: *QTH_pins
@@ -88,24 +86,24 @@ Samtec_QTH-060-01-x-D-A_P0.5mm_Vertical:
 
 Samtec_QTH-060-01-x-D-L_P0.5mm_Vertical:
   <<: *QTH-060-01-x-D
-  add-tags: 'locking'
+  add-tags: 'latching'
   width: 43.0
   holes:
-    - {drill: 0.81, ring: 0.5, space: 41.69, y: -0.508}
+    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
 
 Samtec_QTH-060-01-x-D-A-L_P0.5mm_Vertical:
   <<: *QTH-060-01-x-D
-  add-tags: 'alignment-pins locking'
+  add-tags: 'alignment-pins latching'
   width: 43.0
   holes:
     - {drill: 1.02, space: 38.48, y: -2.03}
-    - {drill: 0.81, ring: 0.5, space: 41.69, y: -0.508}
+    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
 
 # QTH family; 2 banks; differential
 Samtec_QTH-040-01-x-D-DP_P0.5mm_Vertical: &QTH-040-01-x-D-DP
   description: *QPairs_desc
-  datasheet: 'http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf'
-  tags: 'connector Samtec QPairs mezzanine terminal vertical differential'
+  datasheet: *QTH-DP_ds
+  tags: *QTH-DP_tags
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
   banks: {n: 2, pins: 60, diff: 2, space: 20.0, width: 16.4, height: 3.9}
   pins: *QTH_pins
@@ -118,24 +116,24 @@ Samtec_QTH-040-01-x-D-DP-A_P0.5mm_Vertical:
 
 Samtec_QTH-040-01-x-D-DP-L_P0.5mm_Vertical:
   <<: *QTH-040-01-x-D-DP
-  add-tags: 'locking'
+  add-tags: 'latching'
   width: 43.0
   holes:
-    - {drill: 0.81, ring: 0.5, space: 41.69, y: -0.508}
+    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
 
 Samtec_QTH-040-01-x-D-DP-A-L_P0.5mm_Vertical:
   <<: *QTH-040-01-x-D-DP
-  add-tags: 'alignment-pins locking'
+  add-tags: 'alignment-pins latching'
   width: 43.0
   holes:
     - {drill: 1.02, space: 38.48, y: -2.03}
-    - {drill: 0.81, ring: 0.5, space: 41.69, y: -0.508}
+    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
 
 # QTH family; 3 banks
 Samtec_QTH-090-01-x-D_P0.5mm_Vertical: &QTH-090-01-x-D
   description: *QStrip_desc
-  datasheet: 'http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf'
-  tags: 'connector Samtec QStrip mezzanine terminal vertical'
+  datasheet: *QTH_ds
+  tags: *QTH_tags
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
   banks: {n: 3, pins: 60, diff: 0, space: 20.0, width: 16.4, height: 3.9}
   pins: *QTH_pins
@@ -149,8 +147,8 @@ Samtec_QTH-090-01-x-D-A_P0.5mm_Vertical:
 # QTH family; 3 banks; differential
 Samtec_QTH-060-01-x-D-DP_P0.5mm_Vertical: &QTH-060-01-x-D-DP
   description: *QPairs_desc
-  datasheet: 'http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf'
-  tags: 'connector Samtec QPairs mezzanine terminal vertical differential'
+  datasheet: *QTH-DP_ds
+  tags: *QTH-DP_tags
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
   banks: {n: 3, pins: 60, diff: 3, space: 20.0, width: 16.4, height: 3.9}
   pins: *QTH_pins
@@ -177,36 +175,115 @@ Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical:
 
 ################################################################################
 # QSH family; 1 bank
+Samtec_QSH-030-01-x-D_P0.5mm_Vertical: &QSH-030-01-x-D
+  description: *QStrip_desc
+  datasheet: &QSH_ds 'http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-xx-footprint.pdf'
+  tags: &QSH_tags 'connector Samtec QStrip QSH mezzanine socket vertical'
+  layout: {type: 'Socket', width: 21.31, height: 7.24}
+  banks: {n: 1, pins: 60, diff: 0, space: 20.0, width: 15.89, height: 3.81}
+  pins: &QSH_pins
+    signal: {pitch: 0.5, y: 2.67, width: 0.279, height: 2.27}
+    ground: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
+
+Samtec_QSH-030-01-x-D-A_P0.5mm_Vertical:
+  <<: *QSH-030-01-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 20.13, y: 2.03}
+
+Samtec_QSH-030-01-x-D-LC_P0.5mm_Vertical:
+  <<: *QSH-030-01-x-D
+  add-tags: 'locking-clips'
+  holes:
+    - {drill: 1.19, space: 20.13, y: 2.03}
+
 # QSH family; 1 bank; differential
+Samtec_QSH-020-01-x-D-DP_P0.5mm_Vertical: &QSH-020-01-x-D-DP
+  description: *QPairs_desc
+  datasheet: &QSH-DP_ds 'http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-xx-footprint.pdf'
+  tags: &QSH-DP_tags 'connector Samtec QPairs QSH mezzanine socket vertical differential'
+  layout: {type: 'Socket', width: 21.31, height: 7.24}
+  banks: {n: 1, pins: 60, diff: 1, space: 20.0, width: 15.89, height: 3.81}
+  pins: *QSH_pins
+
+Samtec_QSH-020-01-x-D-DP-A_P0.5mm_Vertical:
+  <<: *QSH-020-01-x-D-DP
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 20.13, y: 2.03}
+
+Samtec_QSH-020-01-x-D-DP-LC_P0.5mm_Vertical:
+  <<: *QSH-020-01-x-D-DP
+  add-tags: 'locking-clips'
+  holes:
+    - {drill: 1.19, space: 20.13, y: 2.03}
+
 # QSH family; 2 banks
+Samtec_QSH-060-01-x-D_P0.5mm_Vertical: &QSH-060-01-x-D
+  description: *QStrip_desc
+  datasheet: *QSH_ds
+  tags: *QSH_tags
+  layout: {type: 'Socket', width: 41.31, height: 7.24}
+  banks: {n: 2, pins: 60, diff: 0, space: 20.0, width: 15.89, height: 3.81}
+  pins: *QSH_pins
+
+Samtec_QSH-060-01-x-D-A_P0.5mm_Vertical:
+  <<: *QSH-060-01-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 40.13, y: 2.03}
+
+Samtec_QSH-060-01-x-D-LC_P0.5mm_Vertical:
+  <<: *QSH-060-01-x-D
+  add-tags: 'locking-clips'
+  holes:
+    - {drill: 1.19, space: 40.13, y: 2.03}
+
 # QSH family; 2 banks; differential
+Samtec_QSH-040-01-x-D-DP_P0.5mm_Vertical: &QSH-040-01-x-D-DP
+  description: *QPairs_desc
+  datasheet: *QSH-DP_ds
+  tags: *QSH-DP_tags
+  layout: {type: 'Socket', width: 41.31, height: 7.24}
+  banks: {n: 2, pins: 60, diff: 2, space: 20.0, width: 15.89, height: 3.81}
+  pins: *QSH_pins
+
+Samtec_QSH-040-01-x-D-DP-A_P0.5mm_Vertical:
+  <<: *QSH-040-01-x-D-DP
+  holes:
+    - {drill: 1.02, space: 40.13, y: 2.03}
+
+Samtec_QSH-040-01-x-D-DP-LC_P0.5mm_Vertical:
+  <<: *QSH-040-01-x-D-DP
+  holes:
+    - {drill: 1.19, space: 40.13, y: 2.03}
 
 # QSH family; 3 banks
 Samtec_QSH-090-01-x-D_P0.5mm_Vertical: &QSH-090-01-x-D
   description: *QStrip_desc
-  datasheet: 'http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-xx-footprint.pdf'
-  tags: 'connector Samtec QStrip mezzanine socket vertical'
+  datasheet: *QSH_ds
+  tags: *QSH_tags
   layout: {type: 'Socket', width: 61.38, height: 7.24}
   banks: {n: 3, pins: 60, diff: 0, space: 20.0, width: 15.89, height: 3.81}
-  pins: &QSH_pins
-    signal: {pitch: 0.5, y: 2.67, width: 0.279, height: 2.27}
-    ground: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
+  pins: *QSH_pins
 
 Samtec_QSH-090-01-x-D-A_P0.5mm_Vertical:
   <<: *QSH-090-01-x-D
+  add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 60.13, y: 2.03}
 
 Samtec_QSH-090-01-x-D-LC_P0.5mm_Vertical:
   <<: *QSH-090-01-x-D
+  add-tags: 'locking-clips'
   holes:
     - {drill: 1.19, space: 60.13, y: 2.03}
 
 # QSH family; 3 banks; differential
 Samtec_QSH-060-01-x-D-DP_P0.5mm_Vertical: &QSH-060-01-x-D-DP
   description: *QPairs_desc
-  datasheet: 'http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-dp-xx-footprint.pdf'
-  tags: 'connector Samtec mezzanine socket vertical differential'
+  datasheet: *QSH-DP_ds
+  tags: *QSH-DP_tags
   layout: {type: 'Socket', width: 61.38, height: 7.24}
   banks: {n: 3, pins: 60, diff: 3, space: 20.0, width: 15.89, height: 3.81}
   pins: *QSH_pins

From e9209654f6b3557adf7e9e34e7d39875137f6067 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Fri, 19 Jul 2019 16:36:05 -0700
Subject: [PATCH 08/62] Add 3D model path code to QStrip_Vertical.py

---
 .../Connector_Samtec/QStrip_Vertical.py       | 27 +++++++++++++------
 .../Connector_Samtec/QStrip_Vertical.yaml     |  2 +-
 2 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
index bb21d7a54..ff17099cd 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
@@ -279,11 +279,11 @@ def generate_one_footprint(param, config, library):
                      {'x': silk_lEdge, 'y': -silk_y},
                      {'x': silk_pin1,  'y': -silk_y}]
         # Pin 1 indicator
-        r = pad_w/4
-        fp.append(Circle(center = (pin1.x, pin1.y + pad_h/2 + r + silk_pad),
+        r = 0.075 
+        fp.append(Circle(center = (pin1.x, pin1.y + pad_h/2 + silk_pad),
                          radius = r,
                          layer  = "F.SilkS",
-                         width  = 2*r))
+                         width  = 0.15))
 
     # Generate right end outline
     silk_rEnd = deepcopy(silk_lEnd)
@@ -324,7 +324,9 @@ def generate_one_footprint(param, config, library):
                        width  = court_line))
     
     ############################################################################
-    # Metadata
+    # Set Metadata
+    
+    # Draw reference and value
     text_y = court_y + 1.0
     fp.append(Text(type = 'reference', text = 'REF**',
                    at = (0, -text_y),
@@ -334,7 +336,10 @@ def generate_one_footprint(param, config, library):
                    layer = "F.Fab"))
     fp.append(Text(type = 'value', text=param['name'],
                    at = (0, text_y),
-                   layer='F.Fab'))
+                   layer="F.Fab"))
+    
+    # Set surface-mount attribute
+    fp.setAttribute('smd')
     
     # Part number
     if 'pn' in param:
@@ -365,11 +370,17 @@ def generate_one_footprint(param, config, library):
         tags += ' ' + param['add-tags']
     fp.setTags(tags)
 
+    # 3D model path
+    model_path = os.path.join('${KISYS3DMOD}',
+                              library + '.3dshapes',
+                              param['name'] + '.wrl')
+    fp.append(Model(filename = model_path))
+
     ############################################################################
     # Write kicad_mod file
     
     os.makedirs(library, exist_ok=True)
-    filename = os.path.join(library, param['name'] + '.kicad_mod')
+    filename = os.path.join(library+'.pretty', param['name']+'.kicad_mod')
     KicadFileHandler(fp).writeFile(filename)
 
 ################################################################################
@@ -382,8 +393,8 @@ def generate_one_footprint(param, config, library):
                         default='../conn_config_KLCv3.yaml',
                         help='Series KLC configuration YAML file')
     parser.add_argument('--library', type=str, nargs='?',
-                        default='Connector_Samtec_QStrip.pretty',
-                        help='KiCad library path')
+                        default='Connector_Samtec_QStrip',
+                        help='KiCad library name (without extension)')
     parser.add_argument('files', metavar='file', type=str, nargs='*',
                         help='YAML file(s) containing footprint parameters')
     args = parser.parse_args()
diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
index 2bea72860..7785ffca8 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
@@ -37,7 +37,7 @@ Samtec_QTH-030-01-x-D-A-L_P0.5mm_Vertical:
   width: 23.0
   holes:
     - {drill: 1.02, space: 18.48, y: -2.03}
-    - {drill: 0.8, pad: 1.5, space: 21.69, y: -0.508}
+    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
 
 # QTH family; 1 bank; differential
 Samtec_QTH-020-01-x-D-DP_P0.5mm_Vertical: &QTH-020-01-x-D-DP

From be34746fa9d96c0b3b411037b19ab7a19520d17e Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Fri, 19 Jul 2019 23:15:57 -0700
Subject: [PATCH 09/62] Fix a minor issue with differential banks in
 QStrip_Vertical.py; finish adding QTS-series connectors to
 QStrip_Vertical.yaml

---
 .../Connector_Samtec/QStrip_Vertical.py       |  61 +--
 .../Connector_Samtec/QStrip_Vertical.yaml     | 392 ++++++++++++------
 2 files changed, 299 insertions(+), 154 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
index ff17099cd..1c4e0cf80 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
@@ -5,10 +5,12 @@
 
 ---
 Footprint_Name:
-  description: 'Brief description of the footprint'
-  datasheet: 'URL to footprint datasheet'
-  tags: 'KiCad tags go here'
-  add-tags: 'more tags' # [optional], used to extend the tag list
+  meta: # Footprint metadata
+    pn: 'part number' # [optional], overrides automatic part number detection
+    description: 'Brief description of the footprint'
+    datasheet: 'URL to footprint datasheet'
+    tags: 'KiCad tags go here'
+  tags: 'more tags' # [optional], used to extend the tag list
   layout:
     type: '(Terminal|Socket)'
     width: !!float mm # width
@@ -61,7 +63,7 @@
 from footprint_text_fields import addTextFields
 from helpers import *
 
-def markerArrow(x, y, width, line_width, layer, angle=0, close=True):
+def markerArrow(x, y, width, line_width, layer="F.Fab", angle=0, close=True):
     node = Node()
     points = [(-width/2, width/2),
               (0, 0),
@@ -71,7 +73,7 @@ def markerArrow(x, y, width, line_width, layer, angle=0, close=True):
         points.append((-width/2, width/2))
 
     node.append(PolygoneLine(nodes = points,
-                             layer = "F.Fab",
+                             layer = layer,
                              width = line_width))
     node.insert(Rotation(angle))
     node.insert(Translation(x,y))
@@ -117,24 +119,29 @@ def generate_one_footprint(param, config, library):
     pin = [] # Pin position list, organized by bank
     for b in range(0, banks):
         pin.append([])
-        for p in range(0, pins_per_bank):
+        for p in range(pins_per_bank):
             # Compute next pad location
             pos = Vector2D(pin1.x + (p // 2)*pitch + b*bank_x,
                            pin1.y - (p  % 2)*(2*pin1.y))
-            if b < param['banks']['diff'] and ((p+1) % 6  == 0 or (p+2) % 6 == 0):
-                # Place gaps between differential pairs
-                continue
-            else:
-                pin[b].append(pos) # Add position to list
-                # Create pad (both single-ended and differential)
-                pad = Pad(number = str(n),
-                          at = pos,
-                          size = (pad_w, pad_h),
-                          type = Pad.TYPE_SMT,
-                          layers = Pad.LAYERS_SMT,
-                          shape = Pad.SHAPE_RECT)
-                fp.append(pad)
-                n = n + 1
+
+            # Skip slots for differential banks
+            if b < param['banks']['diff']:
+                if ((p+1) % 6 == 0 or # Skip every 3rd odd pin
+                    (p+2) % 6 == 0 or # Skip every 3rd even pin
+                    (p+3) > pins_per_bank): # Skip half-pair at end of bank
+                    continue
+
+            # Create pad
+            pin[b].append(pos) # Add position to list
+            # Create pad (both single-ended and differential)
+            pad = Pad(number = str(n),
+                      at = pos,
+                      size = (pad_w, pad_h),
+                      type = Pad.TYPE_SMT,
+                      layers = Pad.LAYERS_SMT,
+                      shape = Pad.SHAPE_RECT)
+            fp.append(pad)
+            n = n + 1
     
     # Ground pad parameters
     gnd_height    = param['pins']['ground']['height']
@@ -342,8 +349,8 @@ def generate_one_footprint(param, config, library):
     fp.setAttribute('smd')
     
     # Part number
-    if 'pn' in param:
-        partnum = param['pn']
+    if 'pn' in param['meta']:
+        partnum = param['meta']['pn']
     else:
         partnum = param['name'].split('_')[1]
         
@@ -355,17 +362,17 @@ def generate_one_footprint(param, config, library):
         pins_or_pairs = pins_per_bank
 
     # Description
-    desc = param['description']
+    desc = param['meta']['description']
     desc = desc.format(pn = partnum,
                        type = mode,
-                       ds = param['datasheet'],
+                       ds = param['meta']['datasheet'],
                        pitch = pitch,
                        banks = banks,
                        pins = pins_or_pairs)
     fp.setDescription(desc)
 
     # Tags
-    tags = param['tags']
+    tags = param['meta']['tags']
     if 'add-tags' in param:
         tags += ' ' + param['add-tags']
     fp.setTags(tags)
@@ -379,7 +386,7 @@ def generate_one_footprint(param, config, library):
     ############################################################################
     # Write kicad_mod file
     
-    os.makedirs(library, exist_ok=True)
+    os.makedirs(library+'.pretty', exist_ok=True)
     filename = os.path.join(library+'.pretty', param['name']+'.kicad_mod')
     KicadFileHandler(fp).writeFile(filename)
 
diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
index 7785ffca8..c0ba7b466 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
@@ -1,17 +1,20 @@
 _local:
   - &QStrip_desc >-
     Samtec {pn:s} {pitch:1.2f}mm Q Strip® High-Speed Ground Plane {type:s} Strip;
-    {banks:d} banks, {pins:d} pins/bank ({ds:s})
+    {banks:d} bank(s), {pins:d} pins/bank; {ds:s}
   - &QPairs_desc >-
     Samtec {pn:s} {pitch:1.2f}mm Q Pairs® High-Speed Ground Plane {type:s} Strip,
-    Differential Pair; {banks:d} banks, {pins:d} pairs/bank ({ds:s})
+    Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank; {ds:s}
 
 ################################################################################
 # QTH family; 1 bank
 Samtec_QTH-030-01-x-D_P0.5mm_Vertical: &QTH-030-01-x-D
-  description: *QStrip_desc
-  datasheet: &QTH_ds 'http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf'
-  tags: &QTH_tags 'connector Samtec QStrip QTH mezzanine terminal vertical'
+  meta: &QTH_meta
+    description: *QStrip_desc
+    tags: 'connector Samtec QStrip QTH mezzanine terminal vertical'
+    datasheet: >-
+      [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-mkt.pdf),
+      [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
   banks: {n: 1, pins: 60, diff: 0, space: 20.0, width: 16.4, height: 3.9}
   pins: &QTH_pins
@@ -39,41 +42,9 @@ Samtec_QTH-030-01-x-D-A-L_P0.5mm_Vertical:
     - {drill: 1.02, space: 18.48, y: -2.03}
     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
 
-# QTH family; 1 bank; differential
-Samtec_QTH-020-01-x-D-DP_P0.5mm_Vertical: &QTH-020-01-x-D-DP
-  description: *QPairs_desc
-  datasheet: &QTH-DP_ds 'http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf'
-  tags: &QTH-DP_tags 'connector Samtec QPairs QTH mezzanine terminal vertical differential'
-  layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, pins: 60, diff: 1, space: 20.0, width: 16.4, height: 3.9}
-  pins: *QTH_pins
-
-Samtec_QTH-020-01-x-D-DP-A_P0.5mm_Vertical:
-  <<: *QTH-020-01-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.02, space: 18.48, y: -2.03}
-
-Samtec_QTH-020-01-x-D-DP-L_P0.5mm_Vertical:
-  <<: *QTH-020-01-x-D-DP
-  add-tags: 'latching'
-  width: 23.0
-  holes:
-    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
-
-Samtec_QTH-020-01-x-D-DP-A-L_P0.5mm_Vertical:
-  <<: *QTH-020-01-x-D-DP
-  add-tags: 'alignment-pins latching'
-  width: 23.0
-  holes:
-    - {drill: 1.02, space: 18.48, y: -2.03}
-    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
-
 # QTH family; 2 banks
 Samtec_QTH-060-01-x-D_P0.5mm_Vertical: &QTH-060-01-x-D
-  description: *QStrip_desc
-  datasheet: *QTH_ds
-  tags: *QTH_tags
+  meta: *QTH_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
   banks: {n: 2, pins: 60, diff: 0, space: 20.0, width: 16.4, height: 3.9}
   pins: *QTH_pins
@@ -99,11 +70,55 @@ Samtec_QTH-060-01-x-D-A-L_P0.5mm_Vertical:
     - {drill: 1.02, space: 38.48, y: -2.03}
     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
 
+# QTH family; 3 banks
+Samtec_QTH-090-01-x-D_P0.5mm_Vertical: &QTH-090-01-x-D
+  meta: *QTH_meta
+  layout: {type: 'Terminal', width: 60.0, height: 5.97}
+  banks: {n: 3, pins: 60, diff: 0, space: 20.0, width: 16.4, height: 3.9}
+  pins: *QTH_pins
+
+Samtec_QTH-090-01-x-D-A_P0.5mm_Vertical:
+  <<: *QTH-090-01-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 58.48, y: -2.03}
+
+# QTH family; 1 bank; differential
+Samtec_QTH-020-01-x-D-DP_P0.5mm_Vertical: &QTH-020-01-x-D-DP
+  meta: &QTH-DP_meta
+    description: *QPairs_desc
+    tags: 'connector Samtec QPairs QTH mezzanine terminal vertical differential'
+    datasheet: >-
+      [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-mkt.pdf),
+      [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf)
+  layout: {type: 'Terminal', width: 20.0, height: 5.97}
+  banks: {n: 1, pins: 60, diff: 1, space: 20.0, width: 16.4, height: 3.9}
+  pins: *QTH_pins
+
+Samtec_QTH-020-01-x-D-DP-A_P0.5mm_Vertical:
+  <<: *QTH-020-01-x-D-DP
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 18.48, y: -2.03}
+
+Samtec_QTH-020-01-x-D-DP-L_P0.5mm_Vertical:
+  <<: *QTH-020-01-x-D-DP
+  add-tags: 'latching'
+  width: 23.0
+  holes:
+    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
+
+Samtec_QTH-020-01-x-D-DP-A-L_P0.5mm_Vertical:
+  <<: *QTH-020-01-x-D-DP
+  add-tags: 'alignment-pins latching'
+  width: 23.0
+  holes:
+    - {drill: 1.02, space: 18.48, y: -2.03}
+    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
+
 # QTH family; 2 banks; differential
 Samtec_QTH-040-01-x-D-DP_P0.5mm_Vertical: &QTH-040-01-x-D-DP
-  description: *QPairs_desc
-  datasheet: *QTH-DP_ds
-  tags: *QTH-DP_tags
+  meta: *QTH-DP_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
   banks: {n: 2, pins: 60, diff: 2, space: 20.0, width: 16.4, height: 3.9}
   pins: *QTH_pins
@@ -129,26 +144,9 @@ Samtec_QTH-040-01-x-D-DP-A-L_P0.5mm_Vertical:
     - {drill: 1.02, space: 38.48, y: -2.03}
     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
 
-# QTH family; 3 banks
-Samtec_QTH-090-01-x-D_P0.5mm_Vertical: &QTH-090-01-x-D
-  description: *QStrip_desc
-  datasheet: *QTH_ds
-  tags: *QTH_tags
-  layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, pins: 60, diff: 0, space: 20.0, width: 16.4, height: 3.9}
-  pins: *QTH_pins
-
-Samtec_QTH-090-01-x-D-A_P0.5mm_Vertical:
-  <<: *QTH-090-01-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.02, space: 58.48, y: -2.03}
-
 # QTH family; 3 banks; differential
 Samtec_QTH-060-01-x-D-DP_P0.5mm_Vertical: &QTH-060-01-x-D-DP
-  description: *QPairs_desc
-  datasheet: *QTH-DP_ds
-  tags: *QTH-DP_tags
+  meta: *QTH-DP_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
   banks: {n: 3, pins: 60, diff: 3, space: 20.0, width: 16.4, height: 3.9}
   pins: *QTH_pins
@@ -161,12 +159,13 @@ Samtec_QTH-060-01-x-D-DP-A_P0.5mm_Vertical:
 
 # QTH family; 3 banks; specialized
 Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical:
-  pn: 'ASP-122952-01'
-  description: >-
-    Samtec {pn:s} HSMC Card {type:s}; modified QTH-090-01-L-D-A,
-    Bank 1 differential ({ds:s})
-  datasheet: 'http://suddendocs.samtec.com/prints/asp-122952-01-mkt.pdf'
-  tags: 'connector Samtec HSMC card terminal mezzanine vertical differential alignment-pins'
+  meta:
+    pn: 'ASP-122952-01'
+    tags: 'connector Samtec HSMC card terminal mezzanine vertical differential alignment-pins'
+    datasheet: '[drawing/footprint](http://suddendocs.samtec.com/prints/asp-122952-01-mkt.pdf)'
+    description: >-
+      Samtec {pn:s} HSMC Card {type:s}; modified QTH-090-01-L-D-A,
+      Bank 1 differential; {ds:s}
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
   banks: {n: 3, pins: 60, diff: 1, space: 20.0, width: 16.4, height: 3.9}
   pins: *QTH_pins
@@ -176,9 +175,12 @@ Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical:
 ################################################################################
 # QSH family; 1 bank
 Samtec_QSH-030-01-x-D_P0.5mm_Vertical: &QSH-030-01-x-D
-  description: *QStrip_desc
-  datasheet: &QSH_ds 'http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-xx-footprint.pdf'
-  tags: &QSH_tags 'connector Samtec QStrip QSH mezzanine socket vertical'
+  meta: &QSH_meta
+    description: *QStrip_desc
+    tags: 'connector Samtec QStrip QSH mezzanine socket vertical'
+    datasheet: >-
+      [drawing](http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-xxx-mkt.pdf),
+      [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.31, height: 7.24}
   banks: {n: 1, pins: 60, diff: 0, space: 20.0, width: 15.89, height: 3.81}
   pins: &QSH_pins
@@ -197,32 +199,9 @@ Samtec_QSH-030-01-x-D-LC_P0.5mm_Vertical:
   holes:
     - {drill: 1.19, space: 20.13, y: 2.03}
 
-# QSH family; 1 bank; differential
-Samtec_QSH-020-01-x-D-DP_P0.5mm_Vertical: &QSH-020-01-x-D-DP
-  description: *QPairs_desc
-  datasheet: &QSH-DP_ds 'http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-xx-footprint.pdf'
-  tags: &QSH-DP_tags 'connector Samtec QPairs QSH mezzanine socket vertical differential'
-  layout: {type: 'Socket', width: 21.31, height: 7.24}
-  banks: {n: 1, pins: 60, diff: 1, space: 20.0, width: 15.89, height: 3.81}
-  pins: *QSH_pins
-
-Samtec_QSH-020-01-x-D-DP-A_P0.5mm_Vertical:
-  <<: *QSH-020-01-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.02, space: 20.13, y: 2.03}
-
-Samtec_QSH-020-01-x-D-DP-LC_P0.5mm_Vertical:
-  <<: *QSH-020-01-x-D-DP
-  add-tags: 'locking-clips'
-  holes:
-    - {drill: 1.19, space: 20.13, y: 2.03}
-
 # QSH family; 2 banks
 Samtec_QSH-060-01-x-D_P0.5mm_Vertical: &QSH-060-01-x-D
-  description: *QStrip_desc
-  datasheet: *QSH_ds
-  tags: *QSH_tags
+  meta: *QSH_meta
   layout: {type: 'Socket', width: 41.31, height: 7.24}
   banks: {n: 2, pins: 60, diff: 0, space: 20.0, width: 15.89, height: 3.81}
   pins: *QSH_pins
@@ -239,30 +218,9 @@ Samtec_QSH-060-01-x-D-LC_P0.5mm_Vertical:
   holes:
     - {drill: 1.19, space: 40.13, y: 2.03}
 
-# QSH family; 2 banks; differential
-Samtec_QSH-040-01-x-D-DP_P0.5mm_Vertical: &QSH-040-01-x-D-DP
-  description: *QPairs_desc
-  datasheet: *QSH-DP_ds
-  tags: *QSH-DP_tags
-  layout: {type: 'Socket', width: 41.31, height: 7.24}
-  banks: {n: 2, pins: 60, diff: 2, space: 20.0, width: 15.89, height: 3.81}
-  pins: *QSH_pins
-
-Samtec_QSH-040-01-x-D-DP-A_P0.5mm_Vertical:
-  <<: *QSH-040-01-x-D-DP
-  holes:
-    - {drill: 1.02, space: 40.13, y: 2.03}
-
-Samtec_QSH-040-01-x-D-DP-LC_P0.5mm_Vertical:
-  <<: *QSH-040-01-x-D-DP
-  holes:
-    - {drill: 1.19, space: 40.13, y: 2.03}
-
 # QSH family; 3 banks
 Samtec_QSH-090-01-x-D_P0.5mm_Vertical: &QSH-090-01-x-D
-  description: *QStrip_desc
-  datasheet: *QSH_ds
-  tags: *QSH_tags
+  meta: *QSH_meta
   layout: {type: 'Socket', width: 61.38, height: 7.24}
   banks: {n: 3, pins: 60, diff: 0, space: 20.0, width: 15.89, height: 3.81}
   pins: *QSH_pins
@@ -279,11 +237,50 @@ Samtec_QSH-090-01-x-D-LC_P0.5mm_Vertical:
   holes:
     - {drill: 1.19, space: 60.13, y: 2.03}
 
+# QSH family; 1 bank; differential
+Samtec_QSH-020-01-x-D-DP_P0.5mm_Vertical: &QSH-020-01-x-D-DP
+  meta: &QSH-DP_meta
+    description: *QPairs_desc
+    tags: 'connector Samtec QPairs QSH mezzanine socket vertical differential'
+    datasheet: >-
+      [drawing](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-dp-xxx-mkt.pdf),
+      [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-dp-xx-footprint.pdf)
+  layout: {type: 'Socket', width: 21.31, height: 7.24}
+  banks: {n: 1, pins: 60, diff: 1, space: 20.0, width: 15.89, height: 3.81}
+  pins: *QSH_pins
+
+Samtec_QSH-020-01-x-D-DP-A_P0.5mm_Vertical:
+  <<: *QSH-020-01-x-D-DP
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 20.13, y: 2.03}
+
+Samtec_QSH-020-01-x-D-DP-LC_P0.5mm_Vertical:
+  <<: *QSH-020-01-x-D-DP
+  add-tags: 'locking-clips'
+  holes:
+    - {drill: 1.19, space: 20.13, y: 2.03}
+
+# QSH family; 2 banks; differential
+Samtec_QSH-040-01-x-D-DP_P0.5mm_Vertical: &QSH-040-01-x-D-DP
+  meta: *QSH-DP_meta
+  layout: {type: 'Socket', width: 41.31, height: 7.24}
+  banks: {n: 2, pins: 60, diff: 2, space: 20.0, width: 15.89, height: 3.81}
+  pins: *QSH_pins
+
+Samtec_QSH-040-01-x-D-DP-A_P0.5mm_Vertical:
+  <<: *QSH-040-01-x-D-DP
+  holes:
+    - {drill: 1.02, space: 40.13, y: 2.03}
+
+Samtec_QSH-040-01-x-D-DP-LC_P0.5mm_Vertical:
+  <<: *QSH-040-01-x-D-DP
+  holes:
+    - {drill: 1.19, space: 40.13, y: 2.03}
+
 # QSH family; 3 banks; differential
 Samtec_QSH-060-01-x-D-DP_P0.5mm_Vertical: &QSH-060-01-x-D-DP
-  description: *QPairs_desc
-  datasheet: *QSH-DP_ds
-  tags: *QSH-DP_tags
+  meta: *QSH-DP_meta
   layout: {type: 'Socket', width: 61.38, height: 7.24}
   banks: {n: 3, pins: 60, diff: 3, space: 20.0, width: 15.89, height: 3.81}
   pins: *QSH_pins
@@ -300,12 +297,13 @@ Samtec_QSH-060-01-x-D-DP-LC_P0.5mm_Vertical:
 
 # QSH family; 3 banks; specialized
 Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
-  pn: 'ASP-122952-01'
-  description: >-
-    Samtec {pn:s} HSMC Host {type:s}; modified QSH-090-01-L-D-A,
-    Bank 1 differential ({ds:s})
-  datasheet: 'http://suddendocs.samtec.com/prints/asp-122953-01-mkt.pdf'
-  tags: 'connector Samtec HSMC host socket mezzanine vertical differential'
+  meta:
+    pn: 'ASP-122953-01'
+    tags: 'connector Samtec HSMC host socket mezzanine vertical differential'
+    datasheet: '[drawing/footprint](http://suddendocs.samtec.com/prints/asp-122953-01-mkt.pdf)'
+    description: >-
+      Samtec {pn:s} HSMC Host {type:s}; modified QSH-090-01-L-D-A,
+      Bank 1 differential; {ds:s}
   layout: {type: 'Socket', width: 61.38, height: 7.24}
   banks: {n: 3, pins: 60, diff: 1, space: 20.0, width: 15.89, height: 3.81}
   pins: *QSH_pins
@@ -314,18 +312,158 @@ Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
 
 ################################################################################
 # QTS family; 1 bank
-# QTS family; 1 bank; differential
+Samtec_QTS-025-01-x-D_P0.635mm_Vertical: &QTS-025-01-x-D
+  meta: &QTS_meta
+    description: *QStrip_desc
+    tags: 'connector Samtec QStrip QTS mezzanine terminal vertical'
+    datasheet: >-
+      [drawing](http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-xxx-mkt.pdf)
+      [footprint](http://suddendocs.samtec.com/prints/qts-xxx-01-x-d-xx-footprint.pdf)
+  layout: {type: 'Terminal', width: 20.0, height: 5.97}
+  banks: {n: 1, pins: 50, diff: 0, space: 20.0, width: 16.4, height: 3.94}
+  pins: &QTS_pins
+    signal: {pitch: 0.635, y: 3.086, width: 0.406, height: 1.45}
+    ground: {height: 0.635, width: [2.54, 4.7], space: [16.89, 6.35]}
+
+Samtec_QTS-025-01-x-D-A_P0.635mm_Vertical:
+  <<: *QTS-025-01-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 18.48, y: -2.03}
+
 # QTS family; 2 banks
-# QTS family; 2 banks; differential
+Samtec_QTS-050-01-x-D_P0.635mm_Vertical: &QTS-050-01-x-D
+  meta: *QTS_meta
+  layout: {type: 'Terminal', width: 40.0, height: 5.97}
+  banks: {n: 2, pins: 50, diff: 0, space: 20.0, width: 16.4, height: 3.94}
+  pins: *QTS_pins
+
+Samtec_QTS-050-01-x-D-A_P0.635mm_Vertical:
+  <<: *QTS-050-01-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 38.48, y: -2.03}
+
 # QTS family; 3 banks
+Samtec_QTS-075-01-x-D_P0.635mm_Vertical: &QTS-075-01-x-D
+  meta: *QTS_meta
+  layout: {type: 'Terminal', width: 60.0, height: 5.97}
+  banks: {n: 3, pins: 50, diff: 0, space: 20.0, width: 16.4, height: 3.94}
+  pins: *QTS_pins
+
+Samtec_QTS-075-01-x-D-A_P0.635mm_Vertical:
+  <<: *QTS-075-01-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 58.48, y: -2.03}
+
+# QTS family; 1 bank; differential
+Samtec_QTS-016-01-x-D-DP_P0.635mm_Vertical: &QTS-016-01-x-D-DP
+  meta: &QTS-DP_meta
+    description: *QPairs_desc
+    tags: 'connector Samtec QPairs QTS mezzanine terminal vertical differential'
+    datasheet: >-
+      [drawing](http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-dp-xx-mkt.pdf),
+      [footprint](http://suddendocs.samtec.com/prints/qts-xxx-xx-x-d-dp-xx-footprint.pdf)
+  layout: {type: 'Terminal', width: 20.0, height: 5.97}
+  banks: {n: 1, pins: 50, diff: 1, space: 20.0, width: 16.4, height: 3.94}
+  pins: *QTS_pins
+
+Samtec_QTS-016-01-x-D-DP-A_P0.635mm_Vertical:
+  <<: *QTS-016-01-x-D-DP
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 18.48, y: -2.03}
+
+Samtec_QTS-016-01-x-D-DP-LC_P0.635mm_Vertical:
+  <<: *QTS-016-01-x-D-DP
+  add-tags: 'locking-clips'
+  holes:
+    - {drill: 1.16, space: 18.48, y: -2.03}
+
+# QTS family; 2 banks; differential
+Samtec_QTS-032-01-x-D-DP_P0.635mm_Vertical: &QTS-032-01-x-D-DP
+  meta: *QTS-DP_meta
+  layout: {type: 'Terminal', width: 40.0, height: 5.97}
+  banks: {n: 2, pins: 50, diff: 2, space: 20.0, width: 16.4, height: 3.94}
+  pins: *QTS_pins
+
+Samtec_QTS-032-01-x-D-DP-A_P0.635mm_Vertical:
+  <<: *QTS-032-01-x-D-DP
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 38.48, y: -2.03}
+
+Samtec_QTS-032-01-x-D-DP-LC_P0.635mm_Vertical:
+  <<: *QTS-032-01-x-D-DP
+  add-tags: 'locking-clips'
+  holes:
+    - {drill: 1.16, space: 38.48, y: -2.03}
+
 # QTS family; 3 banks; differential
+Samtec_QTS-048-01-x-D-DP_P0.635mm_Vertical: &QTS-048-01-x-D-DP
+  meta: *QTS-DP_meta
+  layout: {type: 'Terminal', width: 60.0, height: 5.97}
+  banks: {n: 3, pins: 50, diff: 3, space: 20.0, width: 16.4, height: 3.94}
+  pins: *QTS_pins
+
+Samtec_QTS-048-01-x-D-DP-A_P0.635mm_Vertical:
+  <<: *QTS-048-01-x-D-DP
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 58.48, y: -2.03}
+
+Samtec_QTS-048-01-x-D-DP-LC_P0.635mm_Vertical:
+  <<: *QTS-048-01-x-D-DP
+  add-tags: 'locking-clips'
+  holes:
+    - {drill: 1.16, space: 58.48, y: -2.03}
+
+# QTS family; 4 banks; differential
+Samtec_QTS-064-01-x-D-DP_P0.635mm_Vertical: &QTS-064-01-x-D-DP
+  meta: *QTS-DP_meta
+  layout: {type: 'Terminal', width: 80.0, height: 5.97}
+  banks: {n: 4, pins: 50, diff: 4, space: 20.0, width: 16.4, height: 3.94}
+  pins: *QTS_pins
+
+Samtec_QTS-064-01-x-D-DP-A_P0.635mm_Vertical:
+  <<: *QTS-064-01-x-D-DP
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 78.49, y: -2.03}
+
+Samtec_QTS-064-01-x-D-DP-LC_P0.635mm_Vertical:
+  <<: *QTS-064-01-x-D-DP
+  add-tags: 'locking-clips'
+  holes:
+    - {drill: 1.16, space: 78.49, y: -2.03}
+
+# QTS family; 4 banks; differential
+Samtec_QTS-080-01-x-D-DP_P0.635mm_Vertical: &QTS-080-01-x-D-DP
+  meta: *QTS-DP_meta
+  layout: {type: 'Terminal', width: 100.0, height: 5.97}
+  banks: {n: 5, pins: 50, diff: 5, space: 20.0, width: 16.4, height: 3.94}
+  pins: *QTS_pins
+
+Samtec_QTS-080-01-x-D-DP-A_P0.635mm_Vertical:
+  <<: *QTS-080-01-x-D-DP
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 98.49, y: -2.03}
+
+Samtec_QTS-080-01-x-D-DP-LC_P0.635mm_Vertical:
+  <<: *QTS-080-01-x-D-DP
+  add-tags: 'locking-clips'
+  holes:
+    - {drill: 1.16, space: 98.49, y: -2.03}
 
 ################################################################################
 # QSS family; 1 bank
-# QSS family; 1 bank; differential
 # QSS family; 2 banks
-# QSS family; 2 banks; differential
 # QSS family; 3 banks
+
+# QSS family; 1 bank; differential
+# QSS family; 2 banks; differential
 # QSS family; 3 banks; differential
 
 ################################################################################

From 5e569246f7e91a2a568a5b2e10aa5f7fa73584ee Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Fri, 19 Jul 2019 23:21:22 -0700
Subject: [PATCH 10/62] Remove 4- and 5-bank QTS specifications from
 QStrip_Vertical.yaml, no standard mating options exist.

---
 .../Connector_Samtec/QStrip_Vertical.yaml     | 42 +------------------
 1 file changed, 2 insertions(+), 40 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
index c0ba7b466..13458be87 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
@@ -419,44 +419,6 @@ Samtec_QTS-048-01-x-D-DP-LC_P0.635mm_Vertical:
   holes:
     - {drill: 1.16, space: 58.48, y: -2.03}
 
-# QTS family; 4 banks; differential
-Samtec_QTS-064-01-x-D-DP_P0.635mm_Vertical: &QTS-064-01-x-D-DP
-  meta: *QTS-DP_meta
-  layout: {type: 'Terminal', width: 80.0, height: 5.97}
-  banks: {n: 4, pins: 50, diff: 4, space: 20.0, width: 16.4, height: 3.94}
-  pins: *QTS_pins
-
-Samtec_QTS-064-01-x-D-DP-A_P0.635mm_Vertical:
-  <<: *QTS-064-01-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.02, space: 78.49, y: -2.03}
-
-Samtec_QTS-064-01-x-D-DP-LC_P0.635mm_Vertical:
-  <<: *QTS-064-01-x-D-DP
-  add-tags: 'locking-clips'
-  holes:
-    - {drill: 1.16, space: 78.49, y: -2.03}
-
-# QTS family; 4 banks; differential
-Samtec_QTS-080-01-x-D-DP_P0.635mm_Vertical: &QTS-080-01-x-D-DP
-  meta: *QTS-DP_meta
-  layout: {type: 'Terminal', width: 100.0, height: 5.97}
-  banks: {n: 5, pins: 50, diff: 5, space: 20.0, width: 16.4, height: 3.94}
-  pins: *QTS_pins
-
-Samtec_QTS-080-01-x-D-DP-A_P0.635mm_Vertical:
-  <<: *QTS-080-01-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.02, space: 98.49, y: -2.03}
-
-Samtec_QTS-080-01-x-D-DP-LC_P0.635mm_Vertical:
-  <<: *QTS-080-01-x-D-DP
-  add-tags: 'locking-clips'
-  holes:
-    - {drill: 1.16, space: 98.49, y: -2.03}
-
 ################################################################################
 # QSS family; 1 bank
 # QSS family; 2 banks
@@ -468,10 +430,10 @@ Samtec_QTS-080-01-x-D-DP-LC_P0.635mm_Vertical:
 
 ################################################################################
 # QTE family; 1 bank
-# QTE family; 1 bank; differential
 # QTE family; 2 banks
-# QTE family; 2 banks; differential
 # QTE family; 3 banks
+# QTE family; 1 bank; differential
+# QTE family; 2 banks; differential
 # QTE family; 3 banks; differential
 
 ################################################################################

From 092c80dd203827dfda8a9f6b07655f3ffc32143f Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sat, 20 Jul 2019 11:01:32 -0700
Subject: [PATCH 11/62] Add QSS specifications to QStrip_Vertical.yaml

---
 .../Connector_Samtec/QStrip_Vertical.py       |  18 +-
 .../Connector_Samtec/QStrip_Vertical.yaml     | 158 +++++++++++++++---
 2 files changed, 142 insertions(+), 34 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
index 1c4e0cf80..5a6b48730 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
@@ -79,7 +79,7 @@ def markerArrow(x, y, width, line_width, layer="F.Fab", angle=0, close=True):
     node.insert(Translation(x,y))
     return node
 
-def generate_one_footprint(param, config, library):
+def generate_one_footprint(param, config, default_lib):
     fp = Footprint(param['name'])
 
     # Terminal or Socket mode
@@ -349,10 +349,11 @@ def generate_one_footprint(param, config, library):
     fp.setAttribute('smd')
     
     # Part number
-    if 'pn' in param['meta']:
-        partnum = param['meta']['pn']
-    else:
-        partnum = param['name'].split('_')[1]
+    partnum = param['meta'].get('pn', param['name'].split('_')[1])
+    #if 'pn' in param['meta']:
+    #    partnum = param['meta']['pn']
+    #else:
+    #    partnum = param['name'].split('_')[1]
         
     # Pins or pairs/bank
     if param['banks']['diff'] == banks:
@@ -378,8 +379,9 @@ def generate_one_footprint(param, config, library):
     fp.setTags(tags)
 
     # 3D model path
+    library = param.get('library', default_lib)
     model_path = os.path.join('${KISYS3DMOD}',
-                              library + '.3dshapes',
+                              library+'.3dshapes',
                               param['name'] + '.wrl')
     fp.append(Model(filename = model_path))
 
@@ -401,7 +403,7 @@ def generate_one_footprint(param, config, library):
                         help='Series KLC configuration YAML file')
     parser.add_argument('--library', type=str, nargs='?',
                         default='Connector_Samtec_QStrip',
-                        help='KiCad library name (without extension)')
+                        help='Default KiCad library name (without extension)')
     parser.add_argument('files', metavar='file', type=str, nargs='*',
                         help='YAML file(s) containing footprint parameters')
     args = parser.parse_args()
@@ -422,7 +424,7 @@ def generate_one_footprint(param, config, library):
         parser.print_help()
         sys.exit(1)
 
-    print("Library:", args.library)
+    print("Default Library:", args.library)
     
     for path in args.files:
         print("Reading", path)
diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
index 13458be87..c33cccb1c 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
@@ -11,12 +11,12 @@ _local:
 Samtec_QTH-030-01-x-D_P0.5mm_Vertical: &QTH-030-01-x-D
   meta: &QTH_meta
     description: *QStrip_desc
-    tags: 'connector Samtec QStrip QTH mezzanine terminal vertical'
+    tags: 'connector Samtec QStrip QTH mezzanine terminal vertical single-ended'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, pins: 60, diff: 0, space: 20.0, width: 16.4, height: 3.9}
+  banks: {n: 1, diff: 0, pins: 60, space: 20.0, width: 16.4, height: 3.9}
   pins: &QTH_pins
     signal: {pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
     ground: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
@@ -46,7 +46,7 @@ Samtec_QTH-030-01-x-D-A-L_P0.5mm_Vertical:
 Samtec_QTH-060-01-x-D_P0.5mm_Vertical: &QTH-060-01-x-D
   meta: *QTH_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, pins: 60, diff: 0, space: 20.0, width: 16.4, height: 3.9}
+  banks: {n: 2, diff: 0, pins: 60, space: 20.0, width: 16.4, height: 3.9}
   pins: *QTH_pins
 
 Samtec_QTH-060-01-x-D-A_P0.5mm_Vertical:
@@ -74,7 +74,7 @@ Samtec_QTH-060-01-x-D-A-L_P0.5mm_Vertical:
 Samtec_QTH-090-01-x-D_P0.5mm_Vertical: &QTH-090-01-x-D
   meta: *QTH_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, pins: 60, diff: 0, space: 20.0, width: 16.4, height: 3.9}
+  banks: {n: 3, diff: 0, pins: 60, space: 20.0, width: 16.4, height: 3.9}
   pins: *QTH_pins
 
 Samtec_QTH-090-01-x-D-A_P0.5mm_Vertical:
@@ -92,7 +92,7 @@ Samtec_QTH-020-01-x-D-DP_P0.5mm_Vertical: &QTH-020-01-x-D-DP
       [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, pins: 60, diff: 1, space: 20.0, width: 16.4, height: 3.9}
+  banks: {n: 1, diff: 1, pins: 60, space: 20.0, width: 16.4, height: 3.9}
   pins: *QTH_pins
 
 Samtec_QTH-020-01-x-D-DP-A_P0.5mm_Vertical:
@@ -120,7 +120,7 @@ Samtec_QTH-020-01-x-D-DP-A-L_P0.5mm_Vertical:
 Samtec_QTH-040-01-x-D-DP_P0.5mm_Vertical: &QTH-040-01-x-D-DP
   meta: *QTH-DP_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, pins: 60, diff: 2, space: 20.0, width: 16.4, height: 3.9}
+  banks: {n: 2, diff: 2, pins: 60, space: 20.0, width: 16.4, height: 3.9}
   pins: *QTH_pins
 
 Samtec_QTH-040-01-x-D-DP-A_P0.5mm_Vertical:
@@ -148,7 +148,7 @@ Samtec_QTH-040-01-x-D-DP-A-L_P0.5mm_Vertical:
 Samtec_QTH-060-01-x-D-DP_P0.5mm_Vertical: &QTH-060-01-x-D-DP
   meta: *QTH-DP_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, pins: 60, diff: 3, space: 20.0, width: 16.4, height: 3.9}
+  banks: {n: 3, diff: 3, pins: 60, space: 20.0, width: 16.4, height: 3.9}
   pins: *QTH_pins
 
 Samtec_QTH-060-01-x-D-DP-A_P0.5mm_Vertical:
@@ -157,17 +157,20 @@ Samtec_QTH-060-01-x-D-DP-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 58.48, y: -2.03}
 
-# QTH family; 3 banks; specialized
+# QTH family; 3 banks; application-specific
 Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical:
+  library: 'Connector_Samtec'
   meta:
     pn: 'ASP-122952-01'
-    tags: 'connector Samtec HSMC card terminal mezzanine vertical differential alignment-pins'
     datasheet: '[drawing/footprint](http://suddendocs.samtec.com/prints/asp-122952-01-mkt.pdf)'
+    tags: >-
+      connector Samtec QStrip QPairs HSMC card terminal mezzanine vertical
+      single-ended differential alignment-pins application-specific'
     description: >-
       Samtec {pn:s} HSMC Card {type:s}; modified QTH-090-01-L-D-A,
       Bank 1 differential; {ds:s}
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, pins: 60, diff: 1, space: 20.0, width: 16.4, height: 3.9}
+  banks: {n: 3, diff: 1, pins: 60, space: 20.0, width: 16.4, height: 3.9}
   pins: *QTH_pins
   holes:
     - {drill: 1.02, space: 58.48, y: -2.03}
@@ -177,12 +180,12 @@ Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical:
 Samtec_QSH-030-01-x-D_P0.5mm_Vertical: &QSH-030-01-x-D
   meta: &QSH_meta
     description: *QStrip_desc
-    tags: 'connector Samtec QStrip QSH mezzanine socket vertical'
+    tags: 'connector Samtec QStrip QSH mezzanine socket vertical single-ended'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.31, height: 7.24}
-  banks: {n: 1, pins: 60, diff: 0, space: 20.0, width: 15.89, height: 3.81}
+  banks: {n: 1, diff: 0, pins: 60, space: 20.0, width: 15.89, height: 3.81}
   pins: &QSH_pins
     signal: {pitch: 0.5, y: 2.67, width: 0.279, height: 2.27}
     ground: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
@@ -203,7 +206,7 @@ Samtec_QSH-030-01-x-D-LC_P0.5mm_Vertical:
 Samtec_QSH-060-01-x-D_P0.5mm_Vertical: &QSH-060-01-x-D
   meta: *QSH_meta
   layout: {type: 'Socket', width: 41.31, height: 7.24}
-  banks: {n: 2, pins: 60, diff: 0, space: 20.0, width: 15.89, height: 3.81}
+  banks: {n: 2, diff: 0, pins: 60, space: 20.0, width: 15.89, height: 3.81}
   pins: *QSH_pins
 
 Samtec_QSH-060-01-x-D-A_P0.5mm_Vertical:
@@ -222,7 +225,7 @@ Samtec_QSH-060-01-x-D-LC_P0.5mm_Vertical:
 Samtec_QSH-090-01-x-D_P0.5mm_Vertical: &QSH-090-01-x-D
   meta: *QSH_meta
   layout: {type: 'Socket', width: 61.38, height: 7.24}
-  banks: {n: 3, pins: 60, diff: 0, space: 20.0, width: 15.89, height: 3.81}
+  banks: {n: 3, diff: 0, pins: 60, space: 20.0, width: 15.89, height: 3.81}
   pins: *QSH_pins
 
 Samtec_QSH-090-01-x-D-A_P0.5mm_Vertical:
@@ -246,7 +249,7 @@ Samtec_QSH-020-01-x-D-DP_P0.5mm_Vertical: &QSH-020-01-x-D-DP
       [drawing](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-dp-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.31, height: 7.24}
-  banks: {n: 1, pins: 60, diff: 1, space: 20.0, width: 15.89, height: 3.81}
+  banks: {n: 1, diff: 1, pins: 60, space: 20.0, width: 15.89, height: 3.81}
   pins: *QSH_pins
 
 Samtec_QSH-020-01-x-D-DP-A_P0.5mm_Vertical:
@@ -265,7 +268,7 @@ Samtec_QSH-020-01-x-D-DP-LC_P0.5mm_Vertical:
 Samtec_QSH-040-01-x-D-DP_P0.5mm_Vertical: &QSH-040-01-x-D-DP
   meta: *QSH-DP_meta
   layout: {type: 'Socket', width: 41.31, height: 7.24}
-  banks: {n: 2, pins: 60, diff: 2, space: 20.0, width: 15.89, height: 3.81}
+  banks: {n: 2, diff: 2, pins: 60, space: 20.0, width: 15.89, height: 3.81}
   pins: *QSH_pins
 
 Samtec_QSH-040-01-x-D-DP-A_P0.5mm_Vertical:
@@ -282,7 +285,7 @@ Samtec_QSH-040-01-x-D-DP-LC_P0.5mm_Vertical:
 Samtec_QSH-060-01-x-D-DP_P0.5mm_Vertical: &QSH-060-01-x-D-DP
   meta: *QSH-DP_meta
   layout: {type: 'Socket', width: 61.38, height: 7.24}
-  banks: {n: 3, pins: 60, diff: 3, space: 20.0, width: 15.89, height: 3.81}
+  banks: {n: 3, diff: 3, pins: 60, space: 20.0, width: 15.89, height: 3.81}
   pins: *QSH_pins
 
 Samtec_QSH-060-01-x-D-DP-A_P0.5mm_Vertical:
@@ -297,15 +300,18 @@ Samtec_QSH-060-01-x-D-DP-LC_P0.5mm_Vertical:
 
 # QSH family; 3 banks; specialized
 Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
+  library: 'Connector_Samtec'
   meta:
     pn: 'ASP-122953-01'
-    tags: 'connector Samtec HSMC host socket mezzanine vertical differential'
     datasheet: '[drawing/footprint](http://suddendocs.samtec.com/prints/asp-122953-01-mkt.pdf)'
+    tags: >-
+      connector Samtec QStrip QPairs HSMC host socket mezzanine vertical
+      single-ended differential application-specific
     description: >-
       Samtec {pn:s} HSMC Host {type:s}; modified QSH-090-01-L-D-A,
       Bank 1 differential; {ds:s}
   layout: {type: 'Socket', width: 61.38, height: 7.24}
-  banks: {n: 3, pins: 60, diff: 1, space: 20.0, width: 15.89, height: 3.81}
+  banks: {n: 3, diff: 1, pins: 60, space: 20.0, width: 15.89, height: 3.81}
   pins: *QSH_pins
   holes:
     - {drill: 1.02, space: 60.13, y: 2.03}
@@ -317,10 +323,10 @@ Samtec_QTS-025-01-x-D_P0.635mm_Vertical: &QTS-025-01-x-D
     description: *QStrip_desc
     tags: 'connector Samtec QStrip QTS mezzanine terminal vertical'
     datasheet: >-
-      [drawing](http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-xxx-mkt.pdf)
+      [drawing](http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qts-xxx-01-x-d-xx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, pins: 50, diff: 0, space: 20.0, width: 16.4, height: 3.94}
+  banks: {n: 1, diff: 0, pins: 50, space: 20.0, width: 16.4, height: 3.94}
   pins: &QTS_pins
     signal: {pitch: 0.635, y: 3.086, width: 0.406, height: 1.45}
     ground: {height: 0.635, width: [2.54, 4.7], space: [16.89, 6.35]}
@@ -335,7 +341,7 @@ Samtec_QTS-025-01-x-D-A_P0.635mm_Vertical:
 Samtec_QTS-050-01-x-D_P0.635mm_Vertical: &QTS-050-01-x-D
   meta: *QTS_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, pins: 50, diff: 0, space: 20.0, width: 16.4, height: 3.94}
+  banks: {n: 2, diff: 0, pins: 50, space: 20.0, width: 16.4, height: 3.94}
   pins: *QTS_pins
 
 Samtec_QTS-050-01-x-D-A_P0.635mm_Vertical:
@@ -348,7 +354,7 @@ Samtec_QTS-050-01-x-D-A_P0.635mm_Vertical:
 Samtec_QTS-075-01-x-D_P0.635mm_Vertical: &QTS-075-01-x-D
   meta: *QTS_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, pins: 50, diff: 0, space: 20.0, width: 16.4, height: 3.94}
+  banks: {n: 3, diff: 0, pins: 50, space: 20.0, width: 16.4, height: 3.94}
   pins: *QTS_pins
 
 Samtec_QTS-075-01-x-D-A_P0.635mm_Vertical:
@@ -366,7 +372,7 @@ Samtec_QTS-016-01-x-D-DP_P0.635mm_Vertical: &QTS-016-01-x-D-DP
       [drawing](http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-dp-xx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qts-xxx-xx-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, pins: 50, diff: 1, space: 20.0, width: 16.4, height: 3.94}
+  banks: {n: 1, diff: 1, pins: 50, space: 20.0, width: 16.4, height: 3.94}
   pins: *QTS_pins
 
 Samtec_QTS-016-01-x-D-DP-A_P0.635mm_Vertical:
@@ -385,7 +391,7 @@ Samtec_QTS-016-01-x-D-DP-LC_P0.635mm_Vertical:
 Samtec_QTS-032-01-x-D-DP_P0.635mm_Vertical: &QTS-032-01-x-D-DP
   meta: *QTS-DP_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, pins: 50, diff: 2, space: 20.0, width: 16.4, height: 3.94}
+  banks: {n: 2, diff: 2, pins: 50, space: 20.0, width: 16.4, height: 3.94}
   pins: *QTS_pins
 
 Samtec_QTS-032-01-x-D-DP-A_P0.635mm_Vertical:
@@ -404,7 +410,7 @@ Samtec_QTS-032-01-x-D-DP-LC_P0.635mm_Vertical:
 Samtec_QTS-048-01-x-D-DP_P0.635mm_Vertical: &QTS-048-01-x-D-DP
   meta: *QTS-DP_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, pins: 50, diff: 3, space: 20.0, width: 16.4, height: 3.94}
+  banks: {n: 3, diff: 3, pins: 50, space: 20.0, width: 16.4, height: 3.94}
   pins: *QTS_pins
 
 Samtec_QTS-048-01-x-D-DP-A_P0.635mm_Vertical:
@@ -421,12 +427,112 @@ Samtec_QTS-048-01-x-D-DP-LC_P0.635mm_Vertical:
 
 ################################################################################
 # QSS family; 1 bank
+Samtec_QSS-025-01-x-D_P0.635mm_Vertical: &QSS-025-01-x-D
+  meta: &QSS_meta
+    description: *QStrip_desc
+    tags: 'connector Samtec QStrip QSS mezzanine socket vertical single-ended'
+    datasheet: >-
+      [drawing](http://suddendocs.samtec.com/prints/qss-xxx-xx-xxx-d-xxx-mkt.pdf),
+      [footprint](http://suddendocs.samtec.com/prints/qss-xxx-01-x-d-xx-footprint.pdf)
+  layout: {type: 'Socket', width: 21.27, height: 7.24}
+  banks: {n: 1, diff: 0, pins: 50, space: 20.0, width: 15.89, height: 3.66}
+  pins: &QSS_pins
+    signal: {pitch: 0.635, y: 2.865, width: 0.406, height: 2.273}
+    ground: {height: 0.432, width: [2.8, 4.7], space: [16.13, 6.35]}
+
+Samtec_QSS-025-01-x-D-A_P0.635mm_Vertical:
+  <<: *QSS-025-01-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 20.0, y: 2.65}
+
 # QSS family; 2 banks
+Samtec_QSS-050-01-x-D_P0.635mm_Vertical: &QSS-050-01-x-D
+  meta: *QSS_meta
+  layout: {type: 'Socket', width: 41.28, height: 7.24}
+  banks: {n: 2, diff: 0, pins: 50, space: 20.0, width: 15.89, height: 3.66}
+  pins: *QSS_pins
+
+Samtec_QSS-050-01-x-D-A_P0.635mm_Vertical:
+  <<: *QSS-050-01-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 40.0, y: 2.65}
+
 # QSS family; 3 banks
+Samtec_QSS-075-01-x-D_P0.635mm_Vertical: &QSS-075-01-x-D
+  meta: *QSS_meta
+  layout: {type: 'Socket', width: 61.28, height: 7.24}
+  banks: {n: 3, diff: 0, pins: 50, space: 20.0, width: 15.89, height: 3.66}
+  pins: *QSS_pins
+
+Samtec_QSS-075-01-x-D-A_P0.635mm_Vertical:
+  <<: *QSS-075-01-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 60.0, y: 2.65}
 
 # QSS family; 1 bank; differential
+Samtec_QSS-016-01-x-D-DP_P0.635mm_Vertical: &QSS-016-01-x-D-DP
+  meta: &QSS-DP_meta
+    description: *QPairs_desc
+    tags: 'connector Samtec QPairs QSS mezzanine socket vertical differential'
+    datasheet: >-
+      [drawing](http://suddendocs.samtec.com/prints/qss-xxx-xx-xxx-d-dp-xxx-mkt.pdf),
+      [footprint](http://suddendocs.samtec.com/prints/qss-xxx-01-x-d-dp-xx-footprint.pdf)
+  layout: {type: 'Socket', width: 21.27, height: 7.24}
+  banks: {n: 1, diff: 1, pins: 50, space: 20.0, width: 15.89, height: 3.66}
+  pins: *QSS_pins
+
+Samtec_QSS-016-01-x-D-DP-A_P0.635mm_Vertical:
+  <<: *QSS-016-01-x-D-DP
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 20.0, y: 2.67}
+
+Samtec_QSS-016-01-x-D-DP-LC_P0.635mm_Vertical:
+  <<: *QSS-016-01-x-D-DP
+  add-tags: 'locking-clips'
+  holes:
+    - {drill: 1.16, space: 20.0, y: 2.67}
+
 # QSS family; 2 banks; differential
+Samtec_QSS-032-01-x-D-DP_P0.635mm_Vertical: &QSS-032-01-x-D-DP
+  meta: *QSS-DP_meta
+  layout: {type: 'Socket', width: 41.28, height: 7.24}
+  banks: {n: 2, diff: 2, pins: 50, space: 20.0, width: 15.89, height: 3.66}
+  pins: *QSS_pins
+
+Samtec_QSS-032-01-x-D-DP-A_P0.635mm_Vertical:
+  <<: *QSS-032-01-x-D-DP
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 40.0, y: 2.67}
+
+Samtec_QSS-032-01-x-D-DP-LC_P0.635mm_Vertical:
+  <<: *QSS-032-01-x-D-DP
+  add-tags: 'locking-clips'
+  holes:
+    - {drill: 1.16, space: 40.0, y: 2.67}
+
 # QSS family; 3 banks; differential
+Samtec_QSS-048-01-x-D-DP_P0.635mm_Vertical: &QSS-048-01-x-D-DP
+  meta: *QSS-DP_meta
+  layout: {type: 'Socket', width: 61.28, height: 7.24}
+  banks: {n: 3, diff: 3, pins: 50, space: 20.0, width: 15.89, height: 3.66}
+  pins: *QSS_pins
+
+Samtec_QSS-048-01-x-D-DP-A_P0.635mm_Vertical:
+  <<: *QSS-048-01-x-D-DP
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 60.0, y: 2.67}
+
+Samtec_QSS-048-01-x-D-DP-LC_P0.635mm_Vertical:
+  <<: *QSS-048-01-x-D-DP
+  add-tags: 'locking-clips'
+  holes:
+    - {drill: 1.16, space: 60.0, y: 2.67}
 
 ################################################################################
 # QTE family; 1 bank

From fcb88f5a23afc1c61faa888867731a2fa7922e8f Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sat, 20 Jul 2019 11:35:49 -0700
Subject: [PATCH 12/62] Add QTE specifications to QStrip_Vertical.yaml

---
 .../Connector_Samtec/QStrip_Vertical.yaml     | 116 ++++++++++++++++--
 1 file changed, 108 insertions(+), 8 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
index c33cccb1c..3bf28c65e 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
@@ -488,13 +488,13 @@ Samtec_QSS-016-01-x-D-DP-A_P0.635mm_Vertical:
   <<: *QSS-016-01-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 20.0, y: 2.67}
+    - {drill: 1.02, space: 20.0, y: 2.65}
 
 Samtec_QSS-016-01-x-D-DP-LC_P0.635mm_Vertical:
   <<: *QSS-016-01-x-D-DP
   add-tags: 'locking-clips'
   holes:
-    - {drill: 1.16, space: 20.0, y: 2.67}
+    - {drill: 1.16, space: 20.0, y: 2.65}
 
 # QSS family; 2 banks; differential
 Samtec_QSS-032-01-x-D-DP_P0.635mm_Vertical: &QSS-032-01-x-D-DP
@@ -507,13 +507,13 @@ Samtec_QSS-032-01-x-D-DP-A_P0.635mm_Vertical:
   <<: *QSS-032-01-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 40.0, y: 2.67}
+    - {drill: 1.02, space: 40.0, y: 2.65}
 
 Samtec_QSS-032-01-x-D-DP-LC_P0.635mm_Vertical:
   <<: *QSS-032-01-x-D-DP
   add-tags: 'locking-clips'
   holes:
-    - {drill: 1.16, space: 40.0, y: 2.67}
+    - {drill: 1.16, space: 40.0, y: 2.65}
 
 # QSS family; 3 banks; differential
 Samtec_QSS-048-01-x-D-DP_P0.635mm_Vertical: &QSS-048-01-x-D-DP
@@ -526,26 +526,126 @@ Samtec_QSS-048-01-x-D-DP-A_P0.635mm_Vertical:
   <<: *QSS-048-01-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 60.0, y: 2.67}
+    - {drill: 1.02, space: 60.0, y: 2.65}
 
 Samtec_QSS-048-01-x-D-DP-LC_P0.635mm_Vertical:
   <<: *QSS-048-01-x-D-DP
   add-tags: 'locking-clips'
   holes:
-    - {drill: 1.16, space: 60.0, y: 2.67}
+    - {drill: 1.16, space: 60.0, y: 2.65}
 
 ################################################################################
 # QTE family; 1 bank
+Samtec_QTE-020-01-x-D_P0.8mm_Vertical: &QTE-020-01-x-D
+  meta: &QTE_meta
+    description: *QStrip_desc
+    tags: 'connector Samtec QStrip QTE mezzanine terminal vertical'
+    datasheet: >-
+      [drawing](http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-xxx-mkt.pdf),
+      [footprint](http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-xxx-footprint.pdf)
+  layout: {type: 'Terminal', width: 20.0, height: 5.97}
+  banks: {n: 1, diff: 0, pins: 40, space: 20.0, width: 16.4, height: 3.94}
+  pins: &QTE_pins
+    signal: {pitch: 0.8, y: 2.98, width: 0.46, height: 1.94}
+    ground: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
+
+Samtec_QTE-020-01-x-D-A_P0.8mm_Vertical:
+  <<: *QTE-020-01-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 18.48, y: -2.03}
+
 # QTE family; 2 banks
+Samtec_QTE-040-01-x-D_P0.8mm_Vertical: &QTE-040-01-x-D
+  meta: *QTE_meta
+  layout: {type: 'Terminal', width: 40.0, height: 5.97}
+  banks: {n: 2, diff: 0, pins: 40, space: 20.0, width: 16.4, height: 3.94}
+  pins: *QTE_pins
+
+Samtec_QTE-040-01-x-D-A_P0.8mm_Vertical:
+  <<: *QTE-040-01-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 38.48, y: -2.03}
+
 # QTE family; 3 banks
+Samtec_QTE-060-01-x-D_P0.8mm_Vertical: &QTE-060-01-x-D
+  meta: *QTE_meta
+  layout: {type: 'Terminal', width: 60.0, height: 5.97}
+  banks: {n: 3, diff: 0, pins: 40, space: 20.0, width: 16.4, height: 3.94}
+  pins: *QTE_pins
+
+Samtec_QTE-060-01-x-D-A_P0.8mm_Vertical:
+  <<: *QTE-060-01-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 58.48, y: -2.03}
+
 # QTE family; 1 bank; differential
+Samtec_QTE-014-01-x-D-DP_P0.8mm_Vertical: &QTE-014-01-x-D-DP
+  meta: &QTE-DP_meta
+    description: *QPairs_desc
+    tags: 'connector Samtec QPairs QTE mezzanine terminal vertical differential'
+    datasheet: >-
+      [drawing](http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-dp-xxx-mkt.pdf),
+      [footprint](http://suddendocs.samtec.com/prints/qte-xxx-xx-x-d-dp-xx-footprint.pdf)
+  layout: {type: 'Terminal', width: 20.0, height: 5.97}
+  banks: {n: 1, diff: 1, pins: 40, space: 20.0, width: 16.4, height: 3.94}
+  pins: *QTE_pins
+
+Samtec_QTE-014-01-x-D-DP-A_P0.8mm_Vertical:
+  <<: *QTE-014-01-x-D-DP
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 18.48, y: -2.03}
+
+Samtec_QTE-014-01-x-D-DP-A-L_P0.8mm_Vertical:
+  <<: *QTE-014-01-x-D-DP
+  add-tags: 'alignment-pins latching'
+  width: 23.0
+  holes:
+    - {drill: 1.02, space: 18.48, y: -2.03}
+    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.51}
+
 # QTE family; 2 banks; differential
+Samtec_QTE-028-01-x-D-DP_P0.8mm_Vertical: &QTE-028-01-x-D-DP
+  meta: *QTE-DP_meta
+  layout: {type: 'Terminal', width: 40.0, height: 5.97}
+  banks: {n: 2, diff: 2, pins: 40, space: 20.0, width: 16.4, height: 3.94}
+  pins: *QTE_pins
+
+Samtec_QTE-028-01-x-D-DP-A_P0.8mm_Vertical:
+  <<: *QTE-028-01-x-D-DP
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 38.48, y: -2.03}
+
+Samtec_QTE-028-01-x-D-DP-A-L_P0.8mm_Vertical:
+  <<: *QTE-028-01-x-D-DP
+  add-tags: 'alignment-pins latching'
+  width: 23.0
+  holes:
+    - {drill: 1.02, space: 38.48, y: -2.03}
+    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.51}
+
 # QTE family; 3 banks; differential
+Samtec_QTE-042-01-x-D-DP_P0.8mm_Vertical: &QTE-042-01-x-D-DP
+  meta: *QTE-DP_meta
+  layout: {type: 'Terminal', width: 60.0, height: 5.97}
+  banks: {n: 3, diff: 3, pins: 40, space: 20.0, width: 16.4, height: 3.94}
+  pins: *QTE_pins
+
+Samtec_QTE-042-01-x-D-DP-A_P0.8mm_Vertical:
+  <<: *QTE-042-01-x-D-DP
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 58.48, y: -2.03}
 
 ################################################################################
 # QSE family; 1 bank
-# QSE family; 1 bank; differential
 # QSE family; 2 banks
-# QSE family; 2 banks; differential
 # QSE family; 3 banks
+
+# QSE family; 1 bank; differential
+# QSE family; 2 banks; differential
 # QSE family; 3 banks; differential

From aa845e690e35c5e047ea60c0cacd315485714e8e Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sat, 20 Jul 2019 15:54:34 -0700
Subject: [PATCH 13/62] Add QSE specifications to QStrip_Vertical.yaml; fix a
 differential pin generation issue in QStrip_Vertical.py

---
 .../Connector_Samtec/QStrip_Vertical.py       |  37 +-
 .../Connector_Samtec/QStrip_Vertical.yaml     | 438 +++++++++++-------
 2 files changed, 292 insertions(+), 183 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
index 5a6b48730..703a87b63 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
@@ -81,16 +81,16 @@ def markerArrow(x, y, width, line_width, layer="F.Fab", angle=0, close=True):
 
 def generate_one_footprint(param, config, default_lib):
     fp = Footprint(param['name'])
-
+    
     # Terminal or Socket mode
     mode = param['layout']['type'].capitalize()
-
+    
     # Bank parameters
     banks  = param['banks']['n']
     bank_x = param['banks']['space']
     bank_w = param['banks']['width']
     bank_h = param['banks']['height']
-    pins_per_bank = param['banks']['pins']
+    bank_slots = param['banks']['slots']
 
     ############################################################################
     # Copper layer(s)
@@ -103,7 +103,7 @@ def generate_one_footprint(param, config, default_lib):
 
     # Pin 1 position
     pin1 = Vector2D(0,0)
-    pin1.x = -(pins_per_bank / 4)*pitch + pitch/2 - ((banks-1) / 2)*bank_x
+    pin1.x = -(bank_slots / 4)*pitch + pitch/2 - ((banks-1) / 2)*bank_x
     if mode == "Terminal":
         pin1.y = -pad_y
     elif mode == "Socket":
@@ -112,23 +112,26 @@ def generate_one_footprint(param, config, default_lib):
         raise ValueError("Connector type must be either 'Terminal' or 'Socket'")
     
     # Bank 1 center point
-    bank1_mid = pin1.x - pitch/2 + (pins_per_bank / 4)*pitch
+    bank1_mid = pin1.x - pitch/2 + (bank_slots / 4)*pitch
 
     # Place signal pads
     n = 1 # Pin counter
     pin = [] # Pin position list, organized by bank
     for b in range(0, banks):
         pin.append([])
-        for p in range(pins_per_bank):
+        for slot in range(bank_slots):
             # Compute next pad location
-            pos = Vector2D(pin1.x + (p // 2)*pitch + b*bank_x,
-                           pin1.y - (p  % 2)*(2*pin1.y))
+            pos = {'x': pin1.x + (slot // 2)*pitch + b*bank_x,
+                   'y': pin1.y - (slot  % 2)*(2*pin1.y),
+                   'n': n+1, 'slot': slot}
 
             # Skip slots for differential banks
             if b < param['banks']['diff']:
-                if ((p+1) % 6 == 0 or # Skip every 3rd odd pin
-                    (p+2) % 6 == 0 or # Skip every 3rd even pin
-                    (p+3) > pins_per_bank): # Skip half-pair at end of bank
+                if ((slot+1) % 6 == 0 or # Skip every 3rd odd slot
+                    (slot+2) % 6 == 0 or # Skip every 3rd even slot
+                    # Only add end-of-bank pins if they are completing a pair
+                    (slot+2 >= bank_slots and
+                     pin[b][-2]['slot'] != slot-2)):
                     continue
 
             # Create pad
@@ -141,7 +144,7 @@ def generate_one_footprint(param, config, default_lib):
                       layers = Pad.LAYERS_SMT,
                       shape = Pad.SHAPE_RECT)
             fp.append(pad)
-            n = n + 1
+            n += 1
     
     # Ground pad parameters
     gnd_height    = param['pins']['ground']['height']
@@ -299,7 +302,7 @@ def generate_one_footprint(param, config, default_lib):
         silk_rEnd[i]['x'] = -silk_rEnd[i]['x']
     # Define right outline inner offset from the last pin
     # (if the last bank is differential, it does not perfectly mirror the first)
-    silk_rEnd[0]['x'] = silk_rEnd[-1]['x'] = pin[-1][-1].x + silk_pad
+    silk_rEnd[0]['x'] = silk_rEnd[-1]['x'] = pin[-1][-1]['x'] + silk_pad
 
     # Draw left and right end outlines
     fp.append(PolygoneLine(nodes = silk_lEnd,
@@ -311,8 +314,8 @@ def generate_one_footprint(param, config, default_lib):
 
     # Draw outlines between banks
     for b in range(banks-1):
-        fp.extend([Line(start = (pin[b][-1].x  + silk_pad, m*silk_y),
-                        end   = (pin[b+1][0].x - silk_pad, m*silk_y),
+        fp.extend([Line(start = (pin[b][-1]['x']  + silk_pad, m*silk_y),
+                        end   = (pin[b+1][0]['x'] - silk_pad, m*silk_y),
                         layer = "F.SilkS",
                         width = silk_line) for m in (-1,1)])
 
@@ -358,9 +361,9 @@ def generate_one_footprint(param, config, default_lib):
     # Pins or pairs/bank
     if param['banks']['diff'] == banks:
         # Differential mode: round up to nearest even number of pairs
-        pins_or_pairs = (pins_per_bank // 3) + (pins_per_bank // 3) % 2
+        pins_or_pairs = (bank_slots // 3) + (bank_slots // 3) % 2
     else:
-        pins_or_pairs = pins_per_bank
+        pins_or_pairs = bank_slots
 
     # Description
     desc = param['meta']['description']
diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
index 3bf28c65e..ebbbcbc40 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
@@ -16,7 +16,7 @@ Samtec_QTH-030-01-x-D_P0.5mm_Vertical: &QTH-030-01-x-D
       [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 0, pins: 60, space: 20.0, width: 16.4, height: 3.9}
+  banks: {n: 1, diff: 0, slots: 60, space: 20.0, width: 16.5, height: 4.0}
   pins: &QTH_pins
     signal: {pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
     ground: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
@@ -27,26 +27,26 @@ Samtec_QTH-030-01-x-D-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 18.48, y: -2.03}
 
-Samtec_QTH-030-01-x-D-L_P0.5mm_Vertical:
-  <<: *QTH-030-01-x-D
-  add-tags: 'latching'
-  width: 23.0
-  holes:
-    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
-
-Samtec_QTH-030-01-x-D-A-L_P0.5mm_Vertical:
-  <<: *QTH-030-01-x-D
-  add-tags: 'alignment-pins latching'
-  width: 23.0
-  holes:
-    - {drill: 1.02, space: 18.48, y: -2.03}
-    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
+##Samtec_QTH-030-01-x-D-L_P0.5mm_Vertical:
+##  <<: *QTH-030-01-x-D
+##  add-tags: 'latching'
+##  width: 23.0
+##  holes:
+##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
+##
+##Samtec_QTH-030-01-x-D-A-L_P0.5mm_Vertical:
+##  <<: *QTH-030-01-x-D
+##  add-tags: 'alignment-pins latching'
+##  width: 23.0
+##  holes:
+##    - {drill: 1.02, space: 18.48, y: -2.03}
+##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
 
 # QTH family; 2 banks
 Samtec_QTH-060-01-x-D_P0.5mm_Vertical: &QTH-060-01-x-D
   meta: *QTH_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 0, pins: 60, space: 20.0, width: 16.4, height: 3.9}
+  banks: {n: 2, diff: 0, slots: 60, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTH_pins
 
 Samtec_QTH-060-01-x-D-A_P0.5mm_Vertical:
@@ -55,26 +55,26 @@ Samtec_QTH-060-01-x-D-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 38.48, y: -2.03}
 
-Samtec_QTH-060-01-x-D-L_P0.5mm_Vertical:
-  <<: *QTH-060-01-x-D
-  add-tags: 'latching'
-  width: 43.0
-  holes:
-    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
-
-Samtec_QTH-060-01-x-D-A-L_P0.5mm_Vertical:
-  <<: *QTH-060-01-x-D
-  add-tags: 'alignment-pins latching'
-  width: 43.0
-  holes:
-    - {drill: 1.02, space: 38.48, y: -2.03}
-    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
+##Samtec_QTH-060-01-x-D-L_P0.5mm_Vertical:
+##  <<: *QTH-060-01-x-D
+##  add-tags: 'latching'
+##  width: 43.0
+##  holes:
+##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
+##
+##Samtec_QTH-060-01-x-D-A-L_P0.5mm_Vertical:
+##  <<: *QTH-060-01-x-D
+##  add-tags: 'alignment-pins latching'
+##  width: 43.0
+##  holes:
+##    - {drill: 1.02, space: 38.48, y: -2.03}
+##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
 
 # QTH family; 3 banks
 Samtec_QTH-090-01-x-D_P0.5mm_Vertical: &QTH-090-01-x-D
   meta: *QTH_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 0, pins: 60, space: 20.0, width: 16.4, height: 3.9}
+  banks: {n: 3, diff: 0, slots: 60, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTH_pins
 
 Samtec_QTH-090-01-x-D-A_P0.5mm_Vertical:
@@ -92,7 +92,7 @@ Samtec_QTH-020-01-x-D-DP_P0.5mm_Vertical: &QTH-020-01-x-D-DP
       [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 1, pins: 60, space: 20.0, width: 16.4, height: 3.9}
+  banks: {n: 1, diff: 1, slots: 60, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTH_pins
 
 Samtec_QTH-020-01-x-D-DP-A_P0.5mm_Vertical:
@@ -101,26 +101,26 @@ Samtec_QTH-020-01-x-D-DP-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 18.48, y: -2.03}
 
-Samtec_QTH-020-01-x-D-DP-L_P0.5mm_Vertical:
-  <<: *QTH-020-01-x-D-DP
-  add-tags: 'latching'
-  width: 23.0
-  holes:
-    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
-
-Samtec_QTH-020-01-x-D-DP-A-L_P0.5mm_Vertical:
-  <<: *QTH-020-01-x-D-DP
-  add-tags: 'alignment-pins latching'
-  width: 23.0
-  holes:
-    - {drill: 1.02, space: 18.48, y: -2.03}
-    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
+##Samtec_QTH-020-01-x-D-DP-L_P0.5mm_Vertical:
+##  <<: *QTH-020-01-x-D-DP
+##  add-tags: 'latching'
+##  width: 23.0
+##  holes:
+##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
+##
+##Samtec_QTH-020-01-x-D-DP-A-L_P0.5mm_Vertical:
+##  <<: *QTH-020-01-x-D-DP
+##  add-tags: 'alignment-pins latching'
+##  width: 23.0
+##  holes:
+##    - {drill: 1.02, space: 18.48, y: -2.03}
+##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
 
 # QTH family; 2 banks; differential
 Samtec_QTH-040-01-x-D-DP_P0.5mm_Vertical: &QTH-040-01-x-D-DP
   meta: *QTH-DP_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 2, pins: 60, space: 20.0, width: 16.4, height: 3.9}
+  banks: {n: 2, diff: 2, slots: 60, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTH_pins
 
 Samtec_QTH-040-01-x-D-DP-A_P0.5mm_Vertical:
@@ -129,26 +129,26 @@ Samtec_QTH-040-01-x-D-DP-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 38.48, y: -2.03}
 
-Samtec_QTH-040-01-x-D-DP-L_P0.5mm_Vertical:
-  <<: *QTH-040-01-x-D-DP
-  add-tags: 'latching'
-  width: 43.0
-  holes:
-    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
-
-Samtec_QTH-040-01-x-D-DP-A-L_P0.5mm_Vertical:
-  <<: *QTH-040-01-x-D-DP
-  add-tags: 'alignment-pins latching'
-  width: 43.0
-  holes:
-    - {drill: 1.02, space: 38.48, y: -2.03}
-    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
+##Samtec_QTH-040-01-x-D-DP-L_P0.5mm_Vertical:
+##  <<: *QTH-040-01-x-D-DP
+##  add-tags: 'latching'
+##  width: 43.0
+##  holes:
+##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
+##
+##Samtec_QTH-040-01-x-D-DP-A-L_P0.5mm_Vertical:
+##  <<: *QTH-040-01-x-D-DP
+##  add-tags: 'alignment-pins latching'
+##  width: 43.0
+##  holes:
+##    - {drill: 1.02, space: 38.48, y: -2.03}
+##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
 
 # QTH family; 3 banks; differential
 Samtec_QTH-060-01-x-D-DP_P0.5mm_Vertical: &QTH-060-01-x-D-DP
   meta: *QTH-DP_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 3, pins: 60, space: 20.0, width: 16.4, height: 3.9}
+  banks: {n: 3, diff: 3, slots: 60, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTH_pins
 
 Samtec_QTH-060-01-x-D-DP-A_P0.5mm_Vertical:
@@ -170,7 +170,7 @@ Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical:
       Samtec {pn:s} HSMC Card {type:s}; modified QTH-090-01-L-D-A,
       Bank 1 differential; {ds:s}
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 1, pins: 60, space: 20.0, width: 16.4, height: 3.9}
+  banks: {n: 3, diff: 1, slots: 60, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTH_pins
   holes:
     - {drill: 1.02, space: 58.48, y: -2.03}
@@ -185,7 +185,7 @@ Samtec_QSH-030-01-x-D_P0.5mm_Vertical: &QSH-030-01-x-D
       [drawing](http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.31, height: 7.24}
-  banks: {n: 1, diff: 0, pins: 60, space: 20.0, width: 15.89, height: 3.81}
+  banks: {n: 1, diff: 0, slots: 60, space: 20.0, width: 16.0, height: 3.8}
   pins: &QSH_pins
     signal: {pitch: 0.5, y: 2.67, width: 0.279, height: 2.27}
     ground: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
@@ -196,17 +196,17 @@ Samtec_QSH-030-01-x-D-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 20.13, y: 2.03}
 
-Samtec_QSH-030-01-x-D-LC_P0.5mm_Vertical:
-  <<: *QSH-030-01-x-D
-  add-tags: 'locking-clips'
-  holes:
-    - {drill: 1.19, space: 20.13, y: 2.03}
+##Samtec_QSH-030-01-x-D-LC_P0.5mm_Vertical:
+##  <<: *QSH-030-01-x-D
+##  add-tags: 'locking-clips'
+##  holes:
+##    - {drill: 1.19, space: 20.13, y: 2.03}
 
 # QSH family; 2 banks
 Samtec_QSH-060-01-x-D_P0.5mm_Vertical: &QSH-060-01-x-D
   meta: *QSH_meta
   layout: {type: 'Socket', width: 41.31, height: 7.24}
-  banks: {n: 2, diff: 0, pins: 60, space: 20.0, width: 15.89, height: 3.81}
+  banks: {n: 2, diff: 0, slots: 60, space: 20.0, width: 16.0, height: 3.8}
   pins: *QSH_pins
 
 Samtec_QSH-060-01-x-D-A_P0.5mm_Vertical:
@@ -215,17 +215,17 @@ Samtec_QSH-060-01-x-D-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 40.13, y: 2.03}
 
-Samtec_QSH-060-01-x-D-LC_P0.5mm_Vertical:
-  <<: *QSH-060-01-x-D
-  add-tags: 'locking-clips'
-  holes:
-    - {drill: 1.19, space: 40.13, y: 2.03}
+##Samtec_QSH-060-01-x-D-LC_P0.5mm_Vertical:
+##  <<: *QSH-060-01-x-D
+##  add-tags: 'locking-clips'
+##  holes:
+##    - {drill: 1.19, space: 40.13, y: 2.03}
 
 # QSH family; 3 banks
 Samtec_QSH-090-01-x-D_P0.5mm_Vertical: &QSH-090-01-x-D
   meta: *QSH_meta
   layout: {type: 'Socket', width: 61.38, height: 7.24}
-  banks: {n: 3, diff: 0, pins: 60, space: 20.0, width: 15.89, height: 3.81}
+  banks: {n: 3, diff: 0, slots: 60, space: 20.0, width: 16.0, height: 3.8}
   pins: *QSH_pins
 
 Samtec_QSH-090-01-x-D-A_P0.5mm_Vertical:
@@ -234,11 +234,11 @@ Samtec_QSH-090-01-x-D-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 60.13, y: 2.03}
 
-Samtec_QSH-090-01-x-D-LC_P0.5mm_Vertical:
-  <<: *QSH-090-01-x-D
-  add-tags: 'locking-clips'
-  holes:
-    - {drill: 1.19, space: 60.13, y: 2.03}
+##Samtec_QSH-090-01-x-D-LC_P0.5mm_Vertical:
+##  <<: *QSH-090-01-x-D
+##  add-tags: 'locking-clips'
+##  holes:
+##    - {drill: 1.19, space: 60.13, y: 2.03}
 
 # QSH family; 1 bank; differential
 Samtec_QSH-020-01-x-D-DP_P0.5mm_Vertical: &QSH-020-01-x-D-DP
@@ -249,7 +249,7 @@ Samtec_QSH-020-01-x-D-DP_P0.5mm_Vertical: &QSH-020-01-x-D-DP
       [drawing](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-dp-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.31, height: 7.24}
-  banks: {n: 1, diff: 1, pins: 60, space: 20.0, width: 15.89, height: 3.81}
+  banks: {n: 1, diff: 1, slots: 60, space: 20.0, width: 16.0, height: 3.8}
   pins: *QSH_pins
 
 Samtec_QSH-020-01-x-D-DP-A_P0.5mm_Vertical:
@@ -258,17 +258,17 @@ Samtec_QSH-020-01-x-D-DP-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 20.13, y: 2.03}
 
-Samtec_QSH-020-01-x-D-DP-LC_P0.5mm_Vertical:
-  <<: *QSH-020-01-x-D-DP
-  add-tags: 'locking-clips'
-  holes:
-    - {drill: 1.19, space: 20.13, y: 2.03}
+##Samtec_QSH-020-01-x-D-DP-LC_P0.5mm_Vertical:
+##  <<: *QSH-020-01-x-D-DP
+##  add-tags: 'locking-clips'
+##  holes:
+##    - {drill: 1.19, space: 20.13, y: 2.03}
 
 # QSH family; 2 banks; differential
 Samtec_QSH-040-01-x-D-DP_P0.5mm_Vertical: &QSH-040-01-x-D-DP
   meta: *QSH-DP_meta
   layout: {type: 'Socket', width: 41.31, height: 7.24}
-  banks: {n: 2, diff: 2, pins: 60, space: 20.0, width: 15.89, height: 3.81}
+  banks: {n: 2, diff: 2, slots: 60, space: 20.0, width: 16.0, height: 3.8}
   pins: *QSH_pins
 
 Samtec_QSH-040-01-x-D-DP-A_P0.5mm_Vertical:
@@ -276,16 +276,16 @@ Samtec_QSH-040-01-x-D-DP-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 40.13, y: 2.03}
 
-Samtec_QSH-040-01-x-D-DP-LC_P0.5mm_Vertical:
-  <<: *QSH-040-01-x-D-DP
-  holes:
-    - {drill: 1.19, space: 40.13, y: 2.03}
+##Samtec_QSH-040-01-x-D-DP-LC_P0.5mm_Vertical:
+##  <<: *QSH-040-01-x-D-DP
+##  holes:
+##    - {drill: 1.19, space: 40.13, y: 2.03}
 
 # QSH family; 3 banks; differential
 Samtec_QSH-060-01-x-D-DP_P0.5mm_Vertical: &QSH-060-01-x-D-DP
   meta: *QSH-DP_meta
   layout: {type: 'Socket', width: 61.38, height: 7.24}
-  banks: {n: 3, diff: 3, pins: 60, space: 20.0, width: 15.89, height: 3.81}
+  banks: {n: 3, diff: 3, slots: 60, space: 20.0, width: 16.0, height: 3.8}
   pins: *QSH_pins
 
 Samtec_QSH-060-01-x-D-DP-A_P0.5mm_Vertical:
@@ -293,10 +293,10 @@ Samtec_QSH-060-01-x-D-DP-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 60.13, y: 2.03}
 
-Samtec_QSH-060-01-x-D-DP-LC_P0.5mm_Vertical:
-  <<: *QSH-060-01-x-D-DP
-  holes:
-    - {drill: 1.19, space: 60.13, y: 2.03}
+##Samtec_QSH-060-01-x-D-DP-LC_P0.5mm_Vertical:
+##  <<: *QSH-060-01-x-D-DP
+##  holes:
+##    - {drill: 1.19, space: 60.13, y: 2.03}
 
 # QSH family; 3 banks; specialized
 Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
@@ -311,7 +311,7 @@ Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
       Samtec {pn:s} HSMC Host {type:s}; modified QSH-090-01-L-D-A,
       Bank 1 differential; {ds:s}
   layout: {type: 'Socket', width: 61.38, height: 7.24}
-  banks: {n: 3, diff: 1, pins: 60, space: 20.0, width: 15.89, height: 3.81}
+  banks: {n: 3, diff: 1, slots: 60, space: 20.0, width: 16.0, height: 3.8}
   pins: *QSH_pins
   holes:
     - {drill: 1.02, space: 60.13, y: 2.03}
@@ -326,7 +326,7 @@ Samtec_QTS-025-01-x-D_P0.635mm_Vertical: &QTS-025-01-x-D
       [drawing](http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qts-xxx-01-x-d-xx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 0, pins: 50, space: 20.0, width: 16.4, height: 3.94}
+  banks: {n: 1, diff: 0, slots: 50, space: 20.0, width: 16.5, height: 4.0}
   pins: &QTS_pins
     signal: {pitch: 0.635, y: 3.086, width: 0.406, height: 1.45}
     ground: {height: 0.635, width: [2.54, 4.7], space: [16.89, 6.35]}
@@ -341,7 +341,7 @@ Samtec_QTS-025-01-x-D-A_P0.635mm_Vertical:
 Samtec_QTS-050-01-x-D_P0.635mm_Vertical: &QTS-050-01-x-D
   meta: *QTS_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 0, pins: 50, space: 20.0, width: 16.4, height: 3.94}
+  banks: {n: 2, diff: 0, slots: 50, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTS_pins
 
 Samtec_QTS-050-01-x-D-A_P0.635mm_Vertical:
@@ -354,7 +354,7 @@ Samtec_QTS-050-01-x-D-A_P0.635mm_Vertical:
 Samtec_QTS-075-01-x-D_P0.635mm_Vertical: &QTS-075-01-x-D
   meta: *QTS_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 0, pins: 50, space: 20.0, width: 16.4, height: 3.94}
+  banks: {n: 3, diff: 0, slots: 50, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTS_pins
 
 Samtec_QTS-075-01-x-D-A_P0.635mm_Vertical:
@@ -372,7 +372,7 @@ Samtec_QTS-016-01-x-D-DP_P0.635mm_Vertical: &QTS-016-01-x-D-DP
       [drawing](http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-dp-xx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qts-xxx-xx-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 1, pins: 50, space: 20.0, width: 16.4, height: 3.94}
+  banks: {n: 1, diff: 1, slots: 50, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTS_pins
 
 Samtec_QTS-016-01-x-D-DP-A_P0.635mm_Vertical:
@@ -381,17 +381,17 @@ Samtec_QTS-016-01-x-D-DP-A_P0.635mm_Vertical:
   holes:
     - {drill: 1.02, space: 18.48, y: -2.03}
 
-Samtec_QTS-016-01-x-D-DP-LC_P0.635mm_Vertical:
-  <<: *QTS-016-01-x-D-DP
-  add-tags: 'locking-clips'
-  holes:
-    - {drill: 1.16, space: 18.48, y: -2.03}
+##Samtec_QTS-016-01-x-D-DP-LC_P0.635mm_Vertical:
+##  <<: *QTS-016-01-x-D-DP
+##  add-tags: 'locking-clips'
+##  holes:
+##    - {drill: 1.16, space: 18.48, y: -2.03}
 
 # QTS family; 2 banks; differential
 Samtec_QTS-032-01-x-D-DP_P0.635mm_Vertical: &QTS-032-01-x-D-DP
   meta: *QTS-DP_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 2, pins: 50, space: 20.0, width: 16.4, height: 3.94}
+  banks: {n: 2, diff: 2, slots: 50, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTS_pins
 
 Samtec_QTS-032-01-x-D-DP-A_P0.635mm_Vertical:
@@ -400,17 +400,17 @@ Samtec_QTS-032-01-x-D-DP-A_P0.635mm_Vertical:
   holes:
     - {drill: 1.02, space: 38.48, y: -2.03}
 
-Samtec_QTS-032-01-x-D-DP-LC_P0.635mm_Vertical:
-  <<: *QTS-032-01-x-D-DP
-  add-tags: 'locking-clips'
-  holes:
-    - {drill: 1.16, space: 38.48, y: -2.03}
+##Samtec_QTS-032-01-x-D-DP-LC_P0.635mm_Vertical:
+##  <<: *QTS-032-01-x-D-DP
+##  add-tags: 'locking-clips'
+##  holes:
+##    - {drill: 1.16, space: 38.48, y: -2.03}
 
 # QTS family; 3 banks; differential
 Samtec_QTS-048-01-x-D-DP_P0.635mm_Vertical: &QTS-048-01-x-D-DP
   meta: *QTS-DP_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 3, pins: 50, space: 20.0, width: 16.4, height: 3.94}
+  banks: {n: 3, diff: 3, slots: 50, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTS_pins
 
 Samtec_QTS-048-01-x-D-DP-A_P0.635mm_Vertical:
@@ -419,11 +419,11 @@ Samtec_QTS-048-01-x-D-DP-A_P0.635mm_Vertical:
   holes:
     - {drill: 1.02, space: 58.48, y: -2.03}
 
-Samtec_QTS-048-01-x-D-DP-LC_P0.635mm_Vertical:
-  <<: *QTS-048-01-x-D-DP
-  add-tags: 'locking-clips'
-  holes:
-    - {drill: 1.16, space: 58.48, y: -2.03}
+##Samtec_QTS-048-01-x-D-DP-LC_P0.635mm_Vertical:
+##  <<: *QTS-048-01-x-D-DP
+##  add-tags: 'locking-clips'
+##  holes:
+##    - {drill: 1.16, space: 58.48, y: -2.03}
 
 ################################################################################
 # QSS family; 1 bank
@@ -435,7 +435,7 @@ Samtec_QSS-025-01-x-D_P0.635mm_Vertical: &QSS-025-01-x-D
       [drawing](http://suddendocs.samtec.com/prints/qss-xxx-xx-xxx-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qss-xxx-01-x-d-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.27, height: 7.24}
-  banks: {n: 1, diff: 0, pins: 50, space: 20.0, width: 15.89, height: 3.66}
+  banks: {n: 1, diff: 0, slots: 50, space: 20.0, width: 16.0, height: 3.66}
   pins: &QSS_pins
     signal: {pitch: 0.635, y: 2.865, width: 0.406, height: 2.273}
     ground: {height: 0.432, width: [2.8, 4.7], space: [16.13, 6.35]}
@@ -444,33 +444,33 @@ Samtec_QSS-025-01-x-D-A_P0.635mm_Vertical:
   <<: *QSS-025-01-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 20.0, y: 2.65}
+    - {drill: 1.02, space: 20.0, y: 2.67}
 
 # QSS family; 2 banks
 Samtec_QSS-050-01-x-D_P0.635mm_Vertical: &QSS-050-01-x-D
   meta: *QSS_meta
   layout: {type: 'Socket', width: 41.28, height: 7.24}
-  banks: {n: 2, diff: 0, pins: 50, space: 20.0, width: 15.89, height: 3.66}
+  banks: {n: 2, diff: 0, slots: 50, space: 20.0, width: 16.0, height: 3.66}
   pins: *QSS_pins
 
 Samtec_QSS-050-01-x-D-A_P0.635mm_Vertical:
   <<: *QSS-050-01-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 40.0, y: 2.65}
+    - {drill: 1.02, space: 40.0, y: 2.67}
 
 # QSS family; 3 banks
 Samtec_QSS-075-01-x-D_P0.635mm_Vertical: &QSS-075-01-x-D
   meta: *QSS_meta
   layout: {type: 'Socket', width: 61.28, height: 7.24}
-  banks: {n: 3, diff: 0, pins: 50, space: 20.0, width: 15.89, height: 3.66}
+  banks: {n: 3, diff: 0, slots: 50, space: 20.0, width: 16.0, height: 3.66}
   pins: *QSS_pins
 
 Samtec_QSS-075-01-x-D-A_P0.635mm_Vertical:
   <<: *QSS-075-01-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 60.0, y: 2.65}
+    - {drill: 1.02, space: 60.0, y: 2.67}
 
 # QSS family; 1 bank; differential
 Samtec_QSS-016-01-x-D-DP_P0.635mm_Vertical: &QSS-016-01-x-D-DP
@@ -481,58 +481,58 @@ Samtec_QSS-016-01-x-D-DP_P0.635mm_Vertical: &QSS-016-01-x-D-DP
       [drawing](http://suddendocs.samtec.com/prints/qss-xxx-xx-xxx-d-dp-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qss-xxx-01-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.27, height: 7.24}
-  banks: {n: 1, diff: 1, pins: 50, space: 20.0, width: 15.89, height: 3.66}
+  banks: {n: 1, diff: 1, slots: 50, space: 20.0, width: 16.0, height: 3.66}
   pins: *QSS_pins
 
 Samtec_QSS-016-01-x-D-DP-A_P0.635mm_Vertical:
   <<: *QSS-016-01-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 20.0, y: 2.65}
+    - {drill: 1.02, space: 20.0, y: 2.67}
 
-Samtec_QSS-016-01-x-D-DP-LC_P0.635mm_Vertical:
-  <<: *QSS-016-01-x-D-DP
-  add-tags: 'locking-clips'
-  holes:
-    - {drill: 1.16, space: 20.0, y: 2.65}
+##Samtec_QSS-016-01-x-D-DP-LC_P0.635mm_Vertical:
+##  <<: *QSS-016-01-x-D-DP
+##  add-tags: 'locking-clips'
+##  holes:
+##    - {drill: 1.16, space: 20.0, y: 2.67}
 
 # QSS family; 2 banks; differential
 Samtec_QSS-032-01-x-D-DP_P0.635mm_Vertical: &QSS-032-01-x-D-DP
   meta: *QSS-DP_meta
   layout: {type: 'Socket', width: 41.28, height: 7.24}
-  banks: {n: 2, diff: 2, pins: 50, space: 20.0, width: 15.89, height: 3.66}
+  banks: {n: 2, diff: 2, slots: 50, space: 20.0, width: 16.0, height: 3.66}
   pins: *QSS_pins
 
 Samtec_QSS-032-01-x-D-DP-A_P0.635mm_Vertical:
   <<: *QSS-032-01-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 40.0, y: 2.65}
+    - {drill: 1.02, space: 40.0, y: 2.67}
 
-Samtec_QSS-032-01-x-D-DP-LC_P0.635mm_Vertical:
-  <<: *QSS-032-01-x-D-DP
-  add-tags: 'locking-clips'
-  holes:
-    - {drill: 1.16, space: 40.0, y: 2.65}
+##Samtec_QSS-032-01-x-D-DP-LC_P0.635mm_Vertical:
+##  <<: *QSS-032-01-x-D-DP
+##  add-tags: 'locking-clips'
+##  holes:
+##    - {drill: 1.16, space: 40.0, y: 2.67}
 
 # QSS family; 3 banks; differential
 Samtec_QSS-048-01-x-D-DP_P0.635mm_Vertical: &QSS-048-01-x-D-DP
   meta: *QSS-DP_meta
   layout: {type: 'Socket', width: 61.28, height: 7.24}
-  banks: {n: 3, diff: 3, pins: 50, space: 20.0, width: 15.89, height: 3.66}
+  banks: {n: 3, diff: 3, slots: 50, space: 20.0, width: 16.0, height: 3.66}
   pins: *QSS_pins
 
 Samtec_QSS-048-01-x-D-DP-A_P0.635mm_Vertical:
   <<: *QSS-048-01-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 60.0, y: 2.65}
+    - {drill: 1.02, space: 60.0, y: 2.67}
 
-Samtec_QSS-048-01-x-D-DP-LC_P0.635mm_Vertical:
-  <<: *QSS-048-01-x-D-DP
-  add-tags: 'locking-clips'
-  holes:
-    - {drill: 1.16, space: 60.0, y: 2.65}
+##Samtec_QSS-048-01-x-D-DP-LC_P0.635mm_Vertical:
+##  <<: *QSS-048-01-x-D-DP
+##  add-tags: 'locking-clips'
+##  holes:
+##    - {drill: 1.16, space: 60.0, y: 2.67}
 
 ################################################################################
 # QTE family; 1 bank
@@ -544,7 +544,7 @@ Samtec_QTE-020-01-x-D_P0.8mm_Vertical: &QTE-020-01-x-D
       [drawing](http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-xxx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 0, pins: 40, space: 20.0, width: 16.4, height: 3.94}
+  banks: {n: 1, diff: 0, slots: 40, space: 20.0, width: 16.5, height: 4.0}
   pins: &QTE_pins
     signal: {pitch: 0.8, y: 2.98, width: 0.46, height: 1.94}
     ground: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
@@ -555,11 +555,19 @@ Samtec_QTE-020-01-x-D-A_P0.8mm_Vertical:
   holes:
     - {drill: 1.02, space: 18.48, y: -2.03}
 
+##Samtec_QTE-020-01-x-D-A-L_P0.8mm_Vertical:
+##  <<: *QTE-020-01-x-D
+##  add-tags: 'alignment-pins latching'
+##  width: 23.0
+##  holes:
+##    - {drill: 1.02, space: 18.48, y: -2.03}
+##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
+
 # QTE family; 2 banks
 Samtec_QTE-040-01-x-D_P0.8mm_Vertical: &QTE-040-01-x-D
   meta: *QTE_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 0, pins: 40, space: 20.0, width: 16.4, height: 3.94}
+  banks: {n: 2, diff: 0, slots: 40, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTE_pins
 
 Samtec_QTE-040-01-x-D-A_P0.8mm_Vertical:
@@ -568,11 +576,19 @@ Samtec_QTE-040-01-x-D-A_P0.8mm_Vertical:
   holes:
     - {drill: 1.02, space: 38.48, y: -2.03}
 
+##Samtec_QTE-040-01-x-D-A-L_P0.8mm_Vertical:
+##  <<: *QTE-040-01-x-D
+##  add-tags: 'alignment-pins latching'
+##  width: 43.0
+##  holes:
+##    - {drill: 1.02, space: 38.48, y: -2.03}
+##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
+
 # QTE family; 3 banks
 Samtec_QTE-060-01-x-D_P0.8mm_Vertical: &QTE-060-01-x-D
   meta: *QTE_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 0, pins: 40, space: 20.0, width: 16.4, height: 3.94}
+  banks: {n: 3, diff: 0, slots: 40, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTE_pins
 
 Samtec_QTE-060-01-x-D-A_P0.8mm_Vertical:
@@ -590,7 +606,7 @@ Samtec_QTE-014-01-x-D-DP_P0.8mm_Vertical: &QTE-014-01-x-D-DP
       [drawing](http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-dp-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qte-xxx-xx-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 1, pins: 40, space: 20.0, width: 16.4, height: 3.94}
+  banks: {n: 1, diff: 1, slots: 40, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTE_pins
 
 Samtec_QTE-014-01-x-D-DP-A_P0.8mm_Vertical:
@@ -599,19 +615,19 @@ Samtec_QTE-014-01-x-D-DP-A_P0.8mm_Vertical:
   holes:
     - {drill: 1.02, space: 18.48, y: -2.03}
 
-Samtec_QTE-014-01-x-D-DP-A-L_P0.8mm_Vertical:
-  <<: *QTE-014-01-x-D-DP
-  add-tags: 'alignment-pins latching'
-  width: 23.0
-  holes:
-    - {drill: 1.02, space: 18.48, y: -2.03}
-    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.51}
+##Samtec_QTE-014-01-x-D-DP-A-L_P0.8mm_Vertical:
+##  <<: *QTE-014-01-x-D-DP
+##  add-tags: 'alignment-pins latching'
+##  width: 23.0
+##  holes:
+##    - {drill: 1.02, space: 18.48, y: -2.03}
+##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.51}
 
 # QTE family; 2 banks; differential
 Samtec_QTE-028-01-x-D-DP_P0.8mm_Vertical: &QTE-028-01-x-D-DP
   meta: *QTE-DP_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 2, pins: 40, space: 20.0, width: 16.4, height: 3.94}
+  banks: {n: 2, diff: 2, slots: 40, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTE_pins
 
 Samtec_QTE-028-01-x-D-DP-A_P0.8mm_Vertical:
@@ -620,19 +636,19 @@ Samtec_QTE-028-01-x-D-DP-A_P0.8mm_Vertical:
   holes:
     - {drill: 1.02, space: 38.48, y: -2.03}
 
-Samtec_QTE-028-01-x-D-DP-A-L_P0.8mm_Vertical:
-  <<: *QTE-028-01-x-D-DP
-  add-tags: 'alignment-pins latching'
-  width: 23.0
-  holes:
-    - {drill: 1.02, space: 38.48, y: -2.03}
-    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.51}
+##Samtec_QTE-028-01-x-D-DP-A-L_P0.8mm_Vertical:
+##  <<: *QTE-028-01-x-D-DP
+##  add-tags: 'alignment-pins latching'
+##  width: 23.0
+##  holes:
+##    - {drill: 1.02, space: 38.48, y: -2.03}
+##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.51}
 
 # QTE family; 3 banks; differential
 Samtec_QTE-042-01-x-D-DP_P0.8mm_Vertical: &QTE-042-01-x-D-DP
   meta: *QTE-DP_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 3, pins: 40, space: 20.0, width: 16.4, height: 3.94}
+  banks: {n: 3, diff: 3, slots: 40, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTE_pins
 
 Samtec_QTE-042-01-x-D-DP-A_P0.8mm_Vertical:
@@ -643,9 +659,99 @@ Samtec_QTE-042-01-x-D-DP-A_P0.8mm_Vertical:
 
 ################################################################################
 # QSE family; 1 bank
+Samtec_QSE-020-01-x-D_P0.8mm_Vertical: &QSE-020-01-x-D
+  meta: &QSE_meta
+    description: *QStrip_desc
+    tags: 'connector Samtec QStrip QSE mezzanine socket vertical single-ended'
+    datasheet: >-
+      [drawing](http://suddendocs.samtec.com/prints/qse-xxx-01-xxx-d-xxx-mkt.pdf),
+      [footprint](http://suddendocs.samtec.com/prints/qse-xxx-01-x-d-xx-footprint.pdf)
+  layout: {type: 'Socket', width: 21.27, height: 7.24}
+  banks: {n: 1, diff: 0, slots: 40, space: 20.0, width: 16.0, height: 3.8}
+  pins: &QSE_pins
+    signal: {pitch: 0.8, y: 2.87, width: 0.41, height: 2.27}
+    ground: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
+
+Samtec_QSE-020-01-x-D-A_P0.8mm_Vertical:
+  <<: *QSE-020-01-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 20.13, y: 2.67}
+
+##Samtec_QSE-020-01-x-D-A-L_P0.8mm_Vertical:
+##  <<: *QSE-020-01-x-D
+##  add-tags: 'alignment-pins latching'
+##  width: 26.61
+##  holes:
+##    - {drill: 1.02, space: 20.13, y: 2.67}
+##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 24.36, y: -0.51}
+
 # QSE family; 2 banks
+Samtec_QSE-040-01-x-D_P0.8mm_Vertical: &QSE-040-01-x-D
+  meta: *QSE_meta
+  layout: {type: 'Socket', width: 41.28, height: 7.24}
+  banks: {n: 2, diff: 0, slots: 40, space: 20.0, width: 16.0, height: 3.8}
+  pins: *QSE_pins
+
+Samtec_QSE-040-01-x-D-A_P0.8mm_Vertical:
+  <<: *QSE-040-01-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 40.13, y: 2.67}
+
 # QSE family; 3 banks
+Samtec_QSE-060-01-x-D_P0.8mm_Vertical: &QSE-060-01-x-D
+  meta: *QSE_meta
+  layout: {type: 'Socket', width: 61.28, height: 7.24}
+  banks: {n: 3, diff: 0, slots: 40, space: 20.0, width: 16.0, height: 3.8}
+  pins: *QSE_pins
+
+Samtec_QSE-060-01-x-D-A_P0.8mm_Vertical:
+  <<: *QSE-060-01-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 60.13, y: 2.67}
 
 # QSE family; 1 bank; differential
+Samtec_QSE-014-01-x-D-DP_P0.8mm_Vertical: &QSE-014-01-x-D-DP
+  meta: &QSE-DP_meta
+    description: *QPairs_desc
+    tags: 'connector Samtec QPairs QSE mezzanine socket vertical differential'
+    datasheet: >-
+      [drawing](http://suddendocs.samtec.com/prints/qse-xxx-xx-xxx-d-dp-xxx-xxxxx-mkt.pdf),
+      [footprint](http://suddendocs.samtec.com/prints/qse-xxx-xx-x-d-dp-xxx-footprint.pdf)
+  layout: {type: 'Socket', width: 21.27, height: 7.24}
+  banks: {n: 1, diff: 1, slots: 40, space: 20.0, width: 16.0, height: 3.8}
+  pins: *QSE_pins
+
+Samtec_QSE-014-01-x-D-DP-A_P0.8mm_Vertical:
+  <<: *QSE-014-01-x-D-DP
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 20.13, y: 2.67}
+
 # QSE family; 2 banks; differential
+Samtec_QSE-028-01-x-D-DP_P0.8mm_Vertical: &QSE-028-01-x-D-DP
+  meta: *QSE-DP_meta
+  layout: {type: 'Socket', width: 41.28, height: 7.24}
+  banks: {n: 2, diff: 2, slots: 40, space: 20.0, width: 16.0, height: 3.8}
+  pins: *QSE_pins
+
+Samtec_QSE-028-01-x-D-DP-A_P0.8mm_Vertical:
+  <<: *QSE-028-01-x-D-DP
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 40.13, y: 2.67}
+
 # QSE family; 3 banks; differential
+Samtec_QSE-042-01-x-D-DP_P0.8mm_Vertical: &QSE-042-01-x-D-DP
+  meta: *QSE-DP_meta
+  layout: {type: 'Socket', width: 61.28, height: 7.24}
+  banks: {n: 3, diff: 3, slots: 40, space: 20.0, width: 16.0, height: 3.8}
+  pins: *QSE_pins
+
+Samtec_QSE-042-01-x-D-DP-A_P0.8mm_Vertical:
+  <<: *QSE-042-01-x-D-DP
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.02, space: 60.13, y: 2.67}

From 1a378fe1ed2f0e16f9048f2892636afc1f95f01c Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sat, 20 Jul 2019 17:06:26 -0700
Subject: [PATCH 14/62] Minor edits/clean-up

---
 .../Connector_Samtec/QStrip_Vertical.py          | 12 +++++-------
 .../Connector_Samtec/QStrip_Vertical.yaml        | 16 ++++++----------
 2 files changed, 11 insertions(+), 17 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
index 703a87b63..23f98ac34 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
@@ -5,6 +5,7 @@
 
 ---
 Footprint_Name:
+  library: 'library name' # [optional] KiCad library to use
   meta: # Footprint metadata
     pn: 'part number' # [optional], overrides automatic part number detection
     description: 'Brief description of the footprint'
@@ -18,7 +19,7 @@
   width: !!float mm # [optional] overrides layout::width
   banks:
     n: !!int # number of banks in the connector
-    pins: !!int even # number of pins in a bank
+    slots: !!int even # number of pin positions in a bank
     diff: !!int <= n # number of differential banks
     space: !!float mm # distance between adjacent banks
     width: !!float mm # Width of outline on F.Fab
@@ -40,11 +41,11 @@
   holes: # [optional] hole pair specifications
     - # Hole spec. 1
       name: "" # [optional] name/number for plated holes
-      drill: !!float mm # drill diameter
-      pad: !!float mm # [optional] PTH pad diameter
+      drill: !!float mm # drill diameter (a list produces an oval)
+      pad: !!float mm # [optional] PTH pad diameter (a list produces an oval)
       space: !!float mm # distance between holes mirrored about the x-axis
       y: !!float mm # vertical offset
-    - # Hole spec. 2
+    - # Hole spec. 2...
 ...
 """
 
@@ -439,9 +440,6 @@ def generate_one_footprint(param, config, default_lib):
                     print(path, "empty, skipping...")
                     continue
 
-                if '_local' in footprints:
-                    del footprints['_local']
-                
                 for fp_name in footprints:
                     print("  - Generate {}.kicad_mod".format(fp_name))
                     fp_params = footprints.get(fp_name)
diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
index ebbbcbc40..bee612444 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
@@ -1,16 +1,10 @@
-_local:
-  - &QStrip_desc >-
-    Samtec {pn:s} {pitch:1.2f}mm Q Strip® High-Speed Ground Plane {type:s} Strip;
-    {banks:d} bank(s), {pins:d} pins/bank; {ds:s}
-  - &QPairs_desc >-
-    Samtec {pn:s} {pitch:1.2f}mm Q Pairs® High-Speed Ground Plane {type:s} Strip,
-    Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank; {ds:s}
-
 ################################################################################
 # QTH family; 1 bank
 Samtec_QTH-030-01-x-D_P0.5mm_Vertical: &QTH-030-01-x-D
   meta: &QTH_meta
-    description: *QStrip_desc
+    description: &QStrip_desc >-
+      Samtec {pn:s} {pitch:1.2f}mm Q Strip® High-Speed Ground Plane {type:s} Strip;
+      {banks:d} bank(s), {pins:d} pins/bank; {ds:s}
     tags: 'connector Samtec QStrip QTH mezzanine terminal vertical single-ended'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-mkt.pdf),
@@ -86,7 +80,9 @@ Samtec_QTH-090-01-x-D-A_P0.5mm_Vertical:
 # QTH family; 1 bank; differential
 Samtec_QTH-020-01-x-D-DP_P0.5mm_Vertical: &QTH-020-01-x-D-DP
   meta: &QTH-DP_meta
-    description: *QPairs_desc
+    description: &QPairs_desc >-
+      Samtec {pn:s} {pitch:1.2f}mm Q Pairs® High-Speed Ground Plane {type:s} Strip,
+      Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank; {ds:s}
     tags: 'connector Samtec QPairs QTH mezzanine terminal vertical differential'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-mkt.pdf),

From 09d3077f807561b53ed6de832b9545a3a8538662 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sat, 20 Jul 2019 23:11:40 -0700
Subject: [PATCH 15/62] Make height option generic for Q Strip footprints (-01
 changed to -xx)

---
 .../Connector_Samtec/QStrip_Vertical.yaml     | 332 +++++++++---------
 1 file changed, 166 insertions(+), 166 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
index bee612444..2da816b76 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
@@ -1,6 +1,6 @@
 ################################################################################
 # QTH family; 1 bank
-Samtec_QTH-030-01-x-D_P0.5mm_Vertical: &QTH-030-01-x-D
+Samtec_QTH-030-xx-x-D_P0.5mm_Vertical: &QTH-030-xx-x-D
   meta: &QTH_meta
     description: &QStrip_desc >-
       Samtec {pn:s} {pitch:1.2f}mm Q Strip® High-Speed Ground Plane {type:s} Strip;
@@ -15,21 +15,21 @@ Samtec_QTH-030-01-x-D_P0.5mm_Vertical: &QTH-030-01-x-D
     signal: {pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
     ground: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
 
-Samtec_QTH-030-01-x-D-A_P0.5mm_Vertical:
-  <<: *QTH-030-01-x-D
+Samtec_QTH-030-xx-x-D-A_P0.5mm_Vertical:
+  <<: *QTH-030-xx-x-D
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 18.48, y: -2.03}
 
-##Samtec_QTH-030-01-x-D-L_P0.5mm_Vertical:
-##  <<: *QTH-030-01-x-D
+##Samtec_QTH-030-xx-x-D-L_P0.5mm_Vertical:
+##  <<: *QTH-030-xx-x-D
 ##  add-tags: 'latching'
 ##  width: 23.0
 ##  holes:
 ##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
 ##
-##Samtec_QTH-030-01-x-D-A-L_P0.5mm_Vertical:
-##  <<: *QTH-030-01-x-D
+##Samtec_QTH-030-xx-x-D-A-L_P0.5mm_Vertical:
+##  <<: *QTH-030-xx-x-D
 ##  add-tags: 'alignment-pins latching'
 ##  width: 23.0
 ##  holes:
@@ -37,27 +37,27 @@ Samtec_QTH-030-01-x-D-A_P0.5mm_Vertical:
 ##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
 
 # QTH family; 2 banks
-Samtec_QTH-060-01-x-D_P0.5mm_Vertical: &QTH-060-01-x-D
+Samtec_QTH-060-xx-x-D_P0.5mm_Vertical: &QTH-060-xx-x-D
   meta: *QTH_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
   banks: {n: 2, diff: 0, slots: 60, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTH_pins
 
-Samtec_QTH-060-01-x-D-A_P0.5mm_Vertical:
-  <<: *QTH-060-01-x-D
+Samtec_QTH-060-xx-x-D-A_P0.5mm_Vertical:
+  <<: *QTH-060-xx-x-D
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 38.48, y: -2.03}
 
-##Samtec_QTH-060-01-x-D-L_P0.5mm_Vertical:
-##  <<: *QTH-060-01-x-D
+##Samtec_QTH-060-xx-x-D-L_P0.5mm_Vertical:
+##  <<: *QTH-060-xx-x-D
 ##  add-tags: 'latching'
 ##  width: 43.0
 ##  holes:
 ##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
 ##
-##Samtec_QTH-060-01-x-D-A-L_P0.5mm_Vertical:
-##  <<: *QTH-060-01-x-D
+##Samtec_QTH-060-xx-x-D-A-L_P0.5mm_Vertical:
+##  <<: *QTH-060-xx-x-D
 ##  add-tags: 'alignment-pins latching'
 ##  width: 43.0
 ##  holes:
@@ -65,20 +65,20 @@ Samtec_QTH-060-01-x-D-A_P0.5mm_Vertical:
 ##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
 
 # QTH family; 3 banks
-Samtec_QTH-090-01-x-D_P0.5mm_Vertical: &QTH-090-01-x-D
+Samtec_QTH-090-xx-x-D_P0.5mm_Vertical: &QTH-090-xx-x-D
   meta: *QTH_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
   banks: {n: 3, diff: 0, slots: 60, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTH_pins
 
-Samtec_QTH-090-01-x-D-A_P0.5mm_Vertical:
-  <<: *QTH-090-01-x-D
+Samtec_QTH-090-xx-x-D-A_P0.5mm_Vertical:
+  <<: *QTH-090-xx-x-D
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 58.48, y: -2.03}
 
 # QTH family; 1 bank; differential
-Samtec_QTH-020-01-x-D-DP_P0.5mm_Vertical: &QTH-020-01-x-D-DP
+Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical: &QTH-020-xx-x-D-DP
   meta: &QTH-DP_meta
     description: &QPairs_desc >-
       Samtec {pn:s} {pitch:1.2f}mm Q Pairs® High-Speed Ground Plane {type:s} Strip,
@@ -91,21 +91,21 @@ Samtec_QTH-020-01-x-D-DP_P0.5mm_Vertical: &QTH-020-01-x-D-DP
   banks: {n: 1, diff: 1, slots: 60, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTH_pins
 
-Samtec_QTH-020-01-x-D-DP-A_P0.5mm_Vertical:
-  <<: *QTH-020-01-x-D-DP
+Samtec_QTH-020-xx-x-D-DP-A_P0.5mm_Vertical:
+  <<: *QTH-020-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 18.48, y: -2.03}
 
-##Samtec_QTH-020-01-x-D-DP-L_P0.5mm_Vertical:
-##  <<: *QTH-020-01-x-D-DP
+##Samtec_QTH-020-xx-x-D-DP-L_P0.5mm_Vertical:
+##  <<: *QTH-020-xx-x-D-DP
 ##  add-tags: 'latching'
 ##  width: 23.0
 ##  holes:
 ##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
 ##
-##Samtec_QTH-020-01-x-D-DP-A-L_P0.5mm_Vertical:
-##  <<: *QTH-020-01-x-D-DP
+##Samtec_QTH-020-xx-x-D-DP-A-L_P0.5mm_Vertical:
+##  <<: *QTH-020-xx-x-D-DP
 ##  add-tags: 'alignment-pins latching'
 ##  width: 23.0
 ##  holes:
@@ -113,27 +113,27 @@ Samtec_QTH-020-01-x-D-DP-A_P0.5mm_Vertical:
 ##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
 
 # QTH family; 2 banks; differential
-Samtec_QTH-040-01-x-D-DP_P0.5mm_Vertical: &QTH-040-01-x-D-DP
+Samtec_QTH-040-xx-x-D-DP_P0.5mm_Vertical: &QTH-040-xx-x-D-DP
   meta: *QTH-DP_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
   banks: {n: 2, diff: 2, slots: 60, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTH_pins
 
-Samtec_QTH-040-01-x-D-DP-A_P0.5mm_Vertical:
-  <<: *QTH-040-01-x-D-DP
+Samtec_QTH-040-xx-x-D-DP-A_P0.5mm_Vertical:
+  <<: *QTH-040-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 38.48, y: -2.03}
 
-##Samtec_QTH-040-01-x-D-DP-L_P0.5mm_Vertical:
-##  <<: *QTH-040-01-x-D-DP
+##Samtec_QTH-040-xx-x-D-DP-L_P0.5mm_Vertical:
+##  <<: *QTH-040-xx-x-D-DP
 ##  add-tags: 'latching'
 ##  width: 43.0
 ##  holes:
 ##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
 ##
-##Samtec_QTH-040-01-x-D-DP-A-L_P0.5mm_Vertical:
-##  <<: *QTH-040-01-x-D-DP
+##Samtec_QTH-040-xx-x-D-DP-A-L_P0.5mm_Vertical:
+##  <<: *QTH-040-xx-x-D-DP
 ##  add-tags: 'alignment-pins latching'
 ##  width: 43.0
 ##  holes:
@@ -141,14 +141,14 @@ Samtec_QTH-040-01-x-D-DP-A_P0.5mm_Vertical:
 ##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
 
 # QTH family; 3 banks; differential
-Samtec_QTH-060-01-x-D-DP_P0.5mm_Vertical: &QTH-060-01-x-D-DP
+Samtec_QTH-060-xx-x-D-DP_P0.5mm_Vertical: &QTH-060-xx-x-D-DP
   meta: *QTH-DP_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
   banks: {n: 3, diff: 3, slots: 60, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTH_pins
 
-Samtec_QTH-060-01-x-D-DP-A_P0.5mm_Vertical:
-  <<: *QTH-060-01-x-D-DP
+Samtec_QTH-060-xx-x-D-DP-A_P0.5mm_Vertical:
+  <<: *QTH-060-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 58.48, y: -2.03}
@@ -173,124 +173,124 @@ Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical:
 
 ################################################################################
 # QSH family; 1 bank
-Samtec_QSH-030-01-x-D_P0.5mm_Vertical: &QSH-030-01-x-D
+Samtec_QSH-030-xx-x-D_P0.5mm_Vertical: &QSH-030-xx-x-D
   meta: &QSH_meta
     description: *QStrip_desc
     tags: 'connector Samtec QStrip QSH mezzanine socket vertical single-ended'
     datasheet: >-
-      [drawing](http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-xxx-mkt.pdf),
-      [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-xx-footprint.pdf)
+      [drawing](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-xxx-mkt.pdf),
+      [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.31, height: 7.24}
   banks: {n: 1, diff: 0, slots: 60, space: 20.0, width: 16.0, height: 3.8}
   pins: &QSH_pins
     signal: {pitch: 0.5, y: 2.67, width: 0.279, height: 2.27}
     ground: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
 
-Samtec_QSH-030-01-x-D-A_P0.5mm_Vertical:
-  <<: *QSH-030-01-x-D
+Samtec_QSH-030-xx-x-D-A_P0.5mm_Vertical:
+  <<: *QSH-030-xx-x-D
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 20.13, y: 2.03}
 
-##Samtec_QSH-030-01-x-D-LC_P0.5mm_Vertical:
-##  <<: *QSH-030-01-x-D
+##Samtec_QSH-030-xx-x-D-LC_P0.5mm_Vertical:
+##  <<: *QSH-030-xx-x-D
 ##  add-tags: 'locking-clips'
 ##  holes:
 ##    - {drill: 1.19, space: 20.13, y: 2.03}
 
 # QSH family; 2 banks
-Samtec_QSH-060-01-x-D_P0.5mm_Vertical: &QSH-060-01-x-D
+Samtec_QSH-060-xx-x-D_P0.5mm_Vertical: &QSH-060-xx-x-D
   meta: *QSH_meta
   layout: {type: 'Socket', width: 41.31, height: 7.24}
   banks: {n: 2, diff: 0, slots: 60, space: 20.0, width: 16.0, height: 3.8}
   pins: *QSH_pins
 
-Samtec_QSH-060-01-x-D-A_P0.5mm_Vertical:
-  <<: *QSH-060-01-x-D
+Samtec_QSH-060-xx-x-D-A_P0.5mm_Vertical:
+  <<: *QSH-060-xx-x-D
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 40.13, y: 2.03}
 
-##Samtec_QSH-060-01-x-D-LC_P0.5mm_Vertical:
-##  <<: *QSH-060-01-x-D
+##Samtec_QSH-060-xx-x-D-LC_P0.5mm_Vertical:
+##  <<: *QSH-060-xx-x-D
 ##  add-tags: 'locking-clips'
 ##  holes:
 ##    - {drill: 1.19, space: 40.13, y: 2.03}
 
 # QSH family; 3 banks
-Samtec_QSH-090-01-x-D_P0.5mm_Vertical: &QSH-090-01-x-D
+Samtec_QSH-090-xx-x-D_P0.5mm_Vertical: &QSH-090-xx-x-D
   meta: *QSH_meta
   layout: {type: 'Socket', width: 61.38, height: 7.24}
   banks: {n: 3, diff: 0, slots: 60, space: 20.0, width: 16.0, height: 3.8}
   pins: *QSH_pins
 
-Samtec_QSH-090-01-x-D-A_P0.5mm_Vertical:
-  <<: *QSH-090-01-x-D
+Samtec_QSH-090-xx-x-D-A_P0.5mm_Vertical:
+  <<: *QSH-090-xx-x-D
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 60.13, y: 2.03}
 
-##Samtec_QSH-090-01-x-D-LC_P0.5mm_Vertical:
-##  <<: *QSH-090-01-x-D
+##Samtec_QSH-090-xx-x-D-LC_P0.5mm_Vertical:
+##  <<: *QSH-090-xx-x-D
 ##  add-tags: 'locking-clips'
 ##  holes:
 ##    - {drill: 1.19, space: 60.13, y: 2.03}
 
 # QSH family; 1 bank; differential
-Samtec_QSH-020-01-x-D-DP_P0.5mm_Vertical: &QSH-020-01-x-D-DP
+Samtec_QSH-020-xx-x-D-DP_P0.5mm_Vertical: &QSH-020-xx-x-D-DP
   meta: &QSH-DP_meta
     description: *QPairs_desc
     tags: 'connector Samtec QPairs QSH mezzanine socket vertical differential'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-dp-xxx-mkt.pdf),
-      [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-01-x-d-dp-xx-footprint.pdf)
+      [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.31, height: 7.24}
   banks: {n: 1, diff: 1, slots: 60, space: 20.0, width: 16.0, height: 3.8}
   pins: *QSH_pins
 
-Samtec_QSH-020-01-x-D-DP-A_P0.5mm_Vertical:
-  <<: *QSH-020-01-x-D-DP
+Samtec_QSH-020-xx-x-D-DP-A_P0.5mm_Vertical:
+  <<: *QSH-020-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 20.13, y: 2.03}
 
-##Samtec_QSH-020-01-x-D-DP-LC_P0.5mm_Vertical:
-##  <<: *QSH-020-01-x-D-DP
+##Samtec_QSH-020-xx-x-D-DP-LC_P0.5mm_Vertical:
+##  <<: *QSH-020-xx-x-D-DP
 ##  add-tags: 'locking-clips'
 ##  holes:
 ##    - {drill: 1.19, space: 20.13, y: 2.03}
 
 # QSH family; 2 banks; differential
-Samtec_QSH-040-01-x-D-DP_P0.5mm_Vertical: &QSH-040-01-x-D-DP
+Samtec_QSH-040-xx-x-D-DP_P0.5mm_Vertical: &QSH-040-xx-x-D-DP
   meta: *QSH-DP_meta
   layout: {type: 'Socket', width: 41.31, height: 7.24}
   banks: {n: 2, diff: 2, slots: 60, space: 20.0, width: 16.0, height: 3.8}
   pins: *QSH_pins
 
-Samtec_QSH-040-01-x-D-DP-A_P0.5mm_Vertical:
-  <<: *QSH-040-01-x-D-DP
+Samtec_QSH-040-xx-x-D-DP-A_P0.5mm_Vertical:
+  <<: *QSH-040-xx-x-D-DP
   holes:
     - {drill: 1.02, space: 40.13, y: 2.03}
 
-##Samtec_QSH-040-01-x-D-DP-LC_P0.5mm_Vertical:
-##  <<: *QSH-040-01-x-D-DP
+##Samtec_QSH-040-xx-x-D-DP-LC_P0.5mm_Vertical:
+##  <<: *QSH-040-xx-x-D-DP
 ##  holes:
 ##    - {drill: 1.19, space: 40.13, y: 2.03}
 
 # QSH family; 3 banks; differential
-Samtec_QSH-060-01-x-D-DP_P0.5mm_Vertical: &QSH-060-01-x-D-DP
+Samtec_QSH-060-xx-x-D-DP_P0.5mm_Vertical: &QSH-060-xx-x-D-DP
   meta: *QSH-DP_meta
   layout: {type: 'Socket', width: 61.38, height: 7.24}
   banks: {n: 3, diff: 3, slots: 60, space: 20.0, width: 16.0, height: 3.8}
   pins: *QSH_pins
 
-Samtec_QSH-060-01-x-D-DP-A_P0.5mm_Vertical:
-  <<: *QSH-060-01-x-D-DP
+Samtec_QSH-060-xx-x-D-DP-A_P0.5mm_Vertical:
+  <<: *QSH-060-xx-x-D-DP
   holes:
     - {drill: 1.02, space: 60.13, y: 2.03}
 
-##Samtec_QSH-060-01-x-D-DP-LC_P0.5mm_Vertical:
-##  <<: *QSH-060-01-x-D-DP
+##Samtec_QSH-060-xx-x-D-DP-LC_P0.5mm_Vertical:
+##  <<: *QSH-060-xx-x-D-DP
 ##  holes:
 ##    - {drill: 1.19, space: 60.13, y: 2.03}
 
@@ -314,53 +314,53 @@ Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
 
 ################################################################################
 # QTS family; 1 bank
-Samtec_QTS-025-01-x-D_P0.635mm_Vertical: &QTS-025-01-x-D
+Samtec_QTS-025-xx-x-D_P0.635mm_Vertical: &QTS-025-xx-x-D
   meta: &QTS_meta
     description: *QStrip_desc
     tags: 'connector Samtec QStrip QTS mezzanine terminal vertical'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-xxx-mkt.pdf),
-      [footprint](http://suddendocs.samtec.com/prints/qts-xxx-01-x-d-xx-footprint.pdf)
+      [footprint](http://suddendocs.samtec.com/prints/qts-xxx-xx-x-d-xx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
   banks: {n: 1, diff: 0, slots: 50, space: 20.0, width: 16.5, height: 4.0}
   pins: &QTS_pins
     signal: {pitch: 0.635, y: 3.086, width: 0.406, height: 1.45}
     ground: {height: 0.635, width: [2.54, 4.7], space: [16.89, 6.35]}
 
-Samtec_QTS-025-01-x-D-A_P0.635mm_Vertical:
-  <<: *QTS-025-01-x-D
+Samtec_QTS-025-xx-x-D-A_P0.635mm_Vertical:
+  <<: *QTS-025-xx-x-D
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 18.48, y: -2.03}
 
 # QTS family; 2 banks
-Samtec_QTS-050-01-x-D_P0.635mm_Vertical: &QTS-050-01-x-D
+Samtec_QTS-050-xx-x-D_P0.635mm_Vertical: &QTS-050-xx-x-D
   meta: *QTS_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
   banks: {n: 2, diff: 0, slots: 50, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTS_pins
 
-Samtec_QTS-050-01-x-D-A_P0.635mm_Vertical:
-  <<: *QTS-050-01-x-D
+Samtec_QTS-050-xx-x-D-A_P0.635mm_Vertical:
+  <<: *QTS-050-xx-x-D
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 38.48, y: -2.03}
 
 # QTS family; 3 banks
-Samtec_QTS-075-01-x-D_P0.635mm_Vertical: &QTS-075-01-x-D
+Samtec_QTS-075-xx-x-D_P0.635mm_Vertical: &QTS-075-xx-x-D
   meta: *QTS_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
   banks: {n: 3, diff: 0, slots: 50, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTS_pins
 
-Samtec_QTS-075-01-x-D-A_P0.635mm_Vertical:
-  <<: *QTS-075-01-x-D
+Samtec_QTS-075-xx-x-D-A_P0.635mm_Vertical:
+  <<: *QTS-075-xx-x-D
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 58.48, y: -2.03}
 
 # QTS family; 1 bank; differential
-Samtec_QTS-016-01-x-D-DP_P0.635mm_Vertical: &QTS-016-01-x-D-DP
+Samtec_QTS-016-xx-x-D-DP_P0.635mm_Vertical: &QTS-016-xx-x-D-DP
   meta: &QTS-DP_meta
     description: *QPairs_desc
     tags: 'connector Samtec QPairs QTS mezzanine terminal vertical differential'
@@ -371,168 +371,168 @@ Samtec_QTS-016-01-x-D-DP_P0.635mm_Vertical: &QTS-016-01-x-D-DP
   banks: {n: 1, diff: 1, slots: 50, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTS_pins
 
-Samtec_QTS-016-01-x-D-DP-A_P0.635mm_Vertical:
-  <<: *QTS-016-01-x-D-DP
+Samtec_QTS-016-xx-x-D-DP-A_P0.635mm_Vertical:
+  <<: *QTS-016-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 18.48, y: -2.03}
 
-##Samtec_QTS-016-01-x-D-DP-LC_P0.635mm_Vertical:
-##  <<: *QTS-016-01-x-D-DP
+##Samtec_QTS-016-xx-x-D-DP-LC_P0.635mm_Vertical:
+##  <<: *QTS-016-xx-x-D-DP
 ##  add-tags: 'locking-clips'
 ##  holes:
 ##    - {drill: 1.16, space: 18.48, y: -2.03}
 
 # QTS family; 2 banks; differential
-Samtec_QTS-032-01-x-D-DP_P0.635mm_Vertical: &QTS-032-01-x-D-DP
+Samtec_QTS-032-xx-x-D-DP_P0.635mm_Vertical: &QTS-032-xx-x-D-DP
   meta: *QTS-DP_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
   banks: {n: 2, diff: 2, slots: 50, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTS_pins
 
-Samtec_QTS-032-01-x-D-DP-A_P0.635mm_Vertical:
-  <<: *QTS-032-01-x-D-DP
+Samtec_QTS-032-xx-x-D-DP-A_P0.635mm_Vertical:
+  <<: *QTS-032-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 38.48, y: -2.03}
 
-##Samtec_QTS-032-01-x-D-DP-LC_P0.635mm_Vertical:
-##  <<: *QTS-032-01-x-D-DP
+##Samtec_QTS-032-xx-x-D-DP-LC_P0.635mm_Vertical:
+##  <<: *QTS-032-xx-x-D-DP
 ##  add-tags: 'locking-clips'
 ##  holes:
 ##    - {drill: 1.16, space: 38.48, y: -2.03}
 
 # QTS family; 3 banks; differential
-Samtec_QTS-048-01-x-D-DP_P0.635mm_Vertical: &QTS-048-01-x-D-DP
+Samtec_QTS-048-xx-x-D-DP_P0.635mm_Vertical: &QTS-048-xx-x-D-DP
   meta: *QTS-DP_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
   banks: {n: 3, diff: 3, slots: 50, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTS_pins
 
-Samtec_QTS-048-01-x-D-DP-A_P0.635mm_Vertical:
-  <<: *QTS-048-01-x-D-DP
+Samtec_QTS-048-xx-x-D-DP-A_P0.635mm_Vertical:
+  <<: *QTS-048-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 58.48, y: -2.03}
 
-##Samtec_QTS-048-01-x-D-DP-LC_P0.635mm_Vertical:
-##  <<: *QTS-048-01-x-D-DP
+##Samtec_QTS-048-xx-x-D-DP-LC_P0.635mm_Vertical:
+##  <<: *QTS-048-xx-x-D-DP
 ##  add-tags: 'locking-clips'
 ##  holes:
 ##    - {drill: 1.16, space: 58.48, y: -2.03}
 
 ################################################################################
 # QSS family; 1 bank
-Samtec_QSS-025-01-x-D_P0.635mm_Vertical: &QSS-025-01-x-D
+Samtec_QSS-025-xx-x-D_P0.635mm_Vertical: &QSS-025-xx-x-D
   meta: &QSS_meta
     description: *QStrip_desc
     tags: 'connector Samtec QStrip QSS mezzanine socket vertical single-ended'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qss-xxx-xx-xxx-d-xxx-mkt.pdf),
-      [footprint](http://suddendocs.samtec.com/prints/qss-xxx-01-x-d-xx-footprint.pdf)
+      [footprint](http://suddendocs.samtec.com/prints/qss-xxx-xx-x-d-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.27, height: 7.24}
   banks: {n: 1, diff: 0, slots: 50, space: 20.0, width: 16.0, height: 3.66}
   pins: &QSS_pins
     signal: {pitch: 0.635, y: 2.865, width: 0.406, height: 2.273}
     ground: {height: 0.432, width: [2.8, 4.7], space: [16.13, 6.35]}
 
-Samtec_QSS-025-01-x-D-A_P0.635mm_Vertical:
-  <<: *QSS-025-01-x-D
+Samtec_QSS-025-xx-x-D-A_P0.635mm_Vertical:
+  <<: *QSS-025-xx-x-D
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 20.0, y: 2.67}
 
 # QSS family; 2 banks
-Samtec_QSS-050-01-x-D_P0.635mm_Vertical: &QSS-050-01-x-D
+Samtec_QSS-050-xx-x-D_P0.635mm_Vertical: &QSS-050-xx-x-D
   meta: *QSS_meta
   layout: {type: 'Socket', width: 41.28, height: 7.24}
   banks: {n: 2, diff: 0, slots: 50, space: 20.0, width: 16.0, height: 3.66}
   pins: *QSS_pins
 
-Samtec_QSS-050-01-x-D-A_P0.635mm_Vertical:
-  <<: *QSS-050-01-x-D
+Samtec_QSS-050-xx-x-D-A_P0.635mm_Vertical:
+  <<: *QSS-050-xx-x-D
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 40.0, y: 2.67}
 
 # QSS family; 3 banks
-Samtec_QSS-075-01-x-D_P0.635mm_Vertical: &QSS-075-01-x-D
+Samtec_QSS-075-xx-x-D_P0.635mm_Vertical: &QSS-075-xx-x-D
   meta: *QSS_meta
   layout: {type: 'Socket', width: 61.28, height: 7.24}
   banks: {n: 3, diff: 0, slots: 50, space: 20.0, width: 16.0, height: 3.66}
   pins: *QSS_pins
 
-Samtec_QSS-075-01-x-D-A_P0.635mm_Vertical:
-  <<: *QSS-075-01-x-D
+Samtec_QSS-075-xx-x-D-A_P0.635mm_Vertical:
+  <<: *QSS-075-xx-x-D
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 60.0, y: 2.67}
 
 # QSS family; 1 bank; differential
-Samtec_QSS-016-01-x-D-DP_P0.635mm_Vertical: &QSS-016-01-x-D-DP
+Samtec_QSS-016-xx-x-D-DP_P0.635mm_Vertical: &QSS-016-xx-x-D-DP
   meta: &QSS-DP_meta
     description: *QPairs_desc
     tags: 'connector Samtec QPairs QSS mezzanine socket vertical differential'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qss-xxx-xx-xxx-d-dp-xxx-mkt.pdf),
-      [footprint](http://suddendocs.samtec.com/prints/qss-xxx-01-x-d-dp-xx-footprint.pdf)
+      [footprint](http://suddendocs.samtec.com/prints/qss-xxx-xx-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.27, height: 7.24}
   banks: {n: 1, diff: 1, slots: 50, space: 20.0, width: 16.0, height: 3.66}
   pins: *QSS_pins
 
-Samtec_QSS-016-01-x-D-DP-A_P0.635mm_Vertical:
-  <<: *QSS-016-01-x-D-DP
+Samtec_QSS-016-xx-x-D-DP-A_P0.635mm_Vertical:
+  <<: *QSS-016-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 20.0, y: 2.67}
 
-##Samtec_QSS-016-01-x-D-DP-LC_P0.635mm_Vertical:
-##  <<: *QSS-016-01-x-D-DP
+##Samtec_QSS-016-xx-x-D-DP-LC_P0.635mm_Vertical:
+##  <<: *QSS-016-xx-x-D-DP
 ##  add-tags: 'locking-clips'
 ##  holes:
 ##    - {drill: 1.16, space: 20.0, y: 2.67}
 
 # QSS family; 2 banks; differential
-Samtec_QSS-032-01-x-D-DP_P0.635mm_Vertical: &QSS-032-01-x-D-DP
+Samtec_QSS-032-xx-x-D-DP_P0.635mm_Vertical: &QSS-032-xx-x-D-DP
   meta: *QSS-DP_meta
   layout: {type: 'Socket', width: 41.28, height: 7.24}
   banks: {n: 2, diff: 2, slots: 50, space: 20.0, width: 16.0, height: 3.66}
   pins: *QSS_pins
 
-Samtec_QSS-032-01-x-D-DP-A_P0.635mm_Vertical:
-  <<: *QSS-032-01-x-D-DP
+Samtec_QSS-032-xx-x-D-DP-A_P0.635mm_Vertical:
+  <<: *QSS-032-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 40.0, y: 2.67}
 
-##Samtec_QSS-032-01-x-D-DP-LC_P0.635mm_Vertical:
-##  <<: *QSS-032-01-x-D-DP
+##Samtec_QSS-032-xx-x-D-DP-LC_P0.635mm_Vertical:
+##  <<: *QSS-032-xx-x-D-DP
 ##  add-tags: 'locking-clips'
 ##  holes:
 ##    - {drill: 1.16, space: 40.0, y: 2.67}
 
 # QSS family; 3 banks; differential
-Samtec_QSS-048-01-x-D-DP_P0.635mm_Vertical: &QSS-048-01-x-D-DP
+Samtec_QSS-048-xx-x-D-DP_P0.635mm_Vertical: &QSS-048-xx-x-D-DP
   meta: *QSS-DP_meta
   layout: {type: 'Socket', width: 61.28, height: 7.24}
   banks: {n: 3, diff: 3, slots: 50, space: 20.0, width: 16.0, height: 3.66}
   pins: *QSS_pins
 
-Samtec_QSS-048-01-x-D-DP-A_P0.635mm_Vertical:
-  <<: *QSS-048-01-x-D-DP
+Samtec_QSS-048-xx-x-D-DP-A_P0.635mm_Vertical:
+  <<: *QSS-048-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 60.0, y: 2.67}
 
-##Samtec_QSS-048-01-x-D-DP-LC_P0.635mm_Vertical:
-##  <<: *QSS-048-01-x-D-DP
+##Samtec_QSS-048-xx-x-D-DP-LC_P0.635mm_Vertical:
+##  <<: *QSS-048-xx-x-D-DP
 ##  add-tags: 'locking-clips'
 ##  holes:
 ##    - {drill: 1.16, space: 60.0, y: 2.67}
 
 ################################################################################
 # QTE family; 1 bank
-Samtec_QTE-020-01-x-D_P0.8mm_Vertical: &QTE-020-01-x-D
+Samtec_QTE-020-xx-x-D_P0.8mm_Vertical: &QTE-020-xx-x-D
   meta: &QTE_meta
     description: *QStrip_desc
     tags: 'connector Samtec QStrip QTE mezzanine terminal vertical'
@@ -545,14 +545,14 @@ Samtec_QTE-020-01-x-D_P0.8mm_Vertical: &QTE-020-01-x-D
     signal: {pitch: 0.8, y: 2.98, width: 0.46, height: 1.94}
     ground: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
 
-Samtec_QTE-020-01-x-D-A_P0.8mm_Vertical:
-  <<: *QTE-020-01-x-D
+Samtec_QTE-020-xx-x-D-A_P0.8mm_Vertical:
+  <<: *QTE-020-xx-x-D
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 18.48, y: -2.03}
 
-##Samtec_QTE-020-01-x-D-A-L_P0.8mm_Vertical:
-##  <<: *QTE-020-01-x-D
+##Samtec_QTE-020-xx-x-D-A-L_P0.8mm_Vertical:
+##  <<: *QTE-020-xx-x-D
 ##  add-tags: 'alignment-pins latching'
 ##  width: 23.0
 ##  holes:
@@ -560,20 +560,20 @@ Samtec_QTE-020-01-x-D-A_P0.8mm_Vertical:
 ##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
 
 # QTE family; 2 banks
-Samtec_QTE-040-01-x-D_P0.8mm_Vertical: &QTE-040-01-x-D
+Samtec_QTE-040-xx-x-D_P0.8mm_Vertical: &QTE-040-xx-x-D
   meta: *QTE_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
   banks: {n: 2, diff: 0, slots: 40, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTE_pins
 
-Samtec_QTE-040-01-x-D-A_P0.8mm_Vertical:
-  <<: *QTE-040-01-x-D
+Samtec_QTE-040-xx-x-D-A_P0.8mm_Vertical:
+  <<: *QTE-040-xx-x-D
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 38.48, y: -2.03}
 
-##Samtec_QTE-040-01-x-D-A-L_P0.8mm_Vertical:
-##  <<: *QTE-040-01-x-D
+##Samtec_QTE-040-xx-x-D-A-L_P0.8mm_Vertical:
+##  <<: *QTE-040-xx-x-D
 ##  add-tags: 'alignment-pins latching'
 ##  width: 43.0
 ##  holes:
@@ -581,20 +581,20 @@ Samtec_QTE-040-01-x-D-A_P0.8mm_Vertical:
 ##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
 
 # QTE family; 3 banks
-Samtec_QTE-060-01-x-D_P0.8mm_Vertical: &QTE-060-01-x-D
+Samtec_QTE-060-xx-x-D_P0.8mm_Vertical: &QTE-060-xx-x-D
   meta: *QTE_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
   banks: {n: 3, diff: 0, slots: 40, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTE_pins
 
-Samtec_QTE-060-01-x-D-A_P0.8mm_Vertical:
-  <<: *QTE-060-01-x-D
+Samtec_QTE-060-xx-x-D-A_P0.8mm_Vertical:
+  <<: *QTE-060-xx-x-D
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 58.48, y: -2.03}
 
 # QTE family; 1 bank; differential
-Samtec_QTE-014-01-x-D-DP_P0.8mm_Vertical: &QTE-014-01-x-D-DP
+Samtec_QTE-014-xx-x-D-DP_P0.8mm_Vertical: &QTE-014-xx-x-D-DP
   meta: &QTE-DP_meta
     description: *QPairs_desc
     tags: 'connector Samtec QPairs QTE mezzanine terminal vertical differential'
@@ -605,14 +605,14 @@ Samtec_QTE-014-01-x-D-DP_P0.8mm_Vertical: &QTE-014-01-x-D-DP
   banks: {n: 1, diff: 1, slots: 40, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTE_pins
 
-Samtec_QTE-014-01-x-D-DP-A_P0.8mm_Vertical:
-  <<: *QTE-014-01-x-D-DP
+Samtec_QTE-014-xx-x-D-DP-A_P0.8mm_Vertical:
+  <<: *QTE-014-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 18.48, y: -2.03}
 
-##Samtec_QTE-014-01-x-D-DP-A-L_P0.8mm_Vertical:
-##  <<: *QTE-014-01-x-D-DP
+##Samtec_QTE-014-xx-x-D-DP-A-L_P0.8mm_Vertical:
+##  <<: *QTE-014-xx-x-D-DP
 ##  add-tags: 'alignment-pins latching'
 ##  width: 23.0
 ##  holes:
@@ -620,20 +620,20 @@ Samtec_QTE-014-01-x-D-DP-A_P0.8mm_Vertical:
 ##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.51}
 
 # QTE family; 2 banks; differential
-Samtec_QTE-028-01-x-D-DP_P0.8mm_Vertical: &QTE-028-01-x-D-DP
+Samtec_QTE-028-xx-x-D-DP_P0.8mm_Vertical: &QTE-028-xx-x-D-DP
   meta: *QTE-DP_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
   banks: {n: 2, diff: 2, slots: 40, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTE_pins
 
-Samtec_QTE-028-01-x-D-DP-A_P0.8mm_Vertical:
-  <<: *QTE-028-01-x-D-DP
+Samtec_QTE-028-xx-x-D-DP-A_P0.8mm_Vertical:
+  <<: *QTE-028-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 38.48, y: -2.03}
 
-##Samtec_QTE-028-01-x-D-DP-A-L_P0.8mm_Vertical:
-##  <<: *QTE-028-01-x-D-DP
+##Samtec_QTE-028-xx-x-D-DP-A-L_P0.8mm_Vertical:
+##  <<: *QTE-028-xx-x-D-DP
 ##  add-tags: 'alignment-pins latching'
 ##  width: 23.0
 ##  holes:
@@ -641,41 +641,41 @@ Samtec_QTE-028-01-x-D-DP-A_P0.8mm_Vertical:
 ##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.51}
 
 # QTE family; 3 banks; differential
-Samtec_QTE-042-01-x-D-DP_P0.8mm_Vertical: &QTE-042-01-x-D-DP
+Samtec_QTE-042-xx-x-D-DP_P0.8mm_Vertical: &QTE-042-xx-x-D-DP
   meta: *QTE-DP_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
   banks: {n: 3, diff: 3, slots: 40, space: 20.0, width: 16.5, height: 4.0}
   pins: *QTE_pins
 
-Samtec_QTE-042-01-x-D-DP-A_P0.8mm_Vertical:
-  <<: *QTE-042-01-x-D-DP
+Samtec_QTE-042-xx-x-D-DP-A_P0.8mm_Vertical:
+  <<: *QTE-042-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 58.48, y: -2.03}
 
 ################################################################################
 # QSE family; 1 bank
-Samtec_QSE-020-01-x-D_P0.8mm_Vertical: &QSE-020-01-x-D
+Samtec_QSE-020-xx-x-D_P0.8mm_Vertical: &QSE-020-xx-x-D
   meta: &QSE_meta
     description: *QStrip_desc
     tags: 'connector Samtec QStrip QSE mezzanine socket vertical single-ended'
     datasheet: >-
-      [drawing](http://suddendocs.samtec.com/prints/qse-xxx-01-xxx-d-xxx-mkt.pdf),
-      [footprint](http://suddendocs.samtec.com/prints/qse-xxx-01-x-d-xx-footprint.pdf)
+      [drawing](http://suddendocs.samtec.com/prints/qse-xxx-xx-xxx-d-xxx-mkt.pdf),
+      [footprint](http://suddendocs.samtec.com/prints/qse-xxx-xx-x-d-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.27, height: 7.24}
   banks: {n: 1, diff: 0, slots: 40, space: 20.0, width: 16.0, height: 3.8}
   pins: &QSE_pins
     signal: {pitch: 0.8, y: 2.87, width: 0.41, height: 2.27}
     ground: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
 
-Samtec_QSE-020-01-x-D-A_P0.8mm_Vertical:
-  <<: *QSE-020-01-x-D
+Samtec_QSE-020-xx-x-D-A_P0.8mm_Vertical:
+  <<: *QSE-020-xx-x-D
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 20.13, y: 2.67}
 
-##Samtec_QSE-020-01-x-D-A-L_P0.8mm_Vertical:
-##  <<: *QSE-020-01-x-D
+##Samtec_QSE-020-xx-x-D-A-L_P0.8mm_Vertical:
+##  <<: *QSE-020-xx-x-D
 ##  add-tags: 'alignment-pins latching'
 ##  width: 26.61
 ##  holes:
@@ -683,33 +683,33 @@ Samtec_QSE-020-01-x-D-A_P0.8mm_Vertical:
 ##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 24.36, y: -0.51}
 
 # QSE family; 2 banks
-Samtec_QSE-040-01-x-D_P0.8mm_Vertical: &QSE-040-01-x-D
+Samtec_QSE-040-xx-x-D_P0.8mm_Vertical: &QSE-040-xx-x-D
   meta: *QSE_meta
   layout: {type: 'Socket', width: 41.28, height: 7.24}
   banks: {n: 2, diff: 0, slots: 40, space: 20.0, width: 16.0, height: 3.8}
   pins: *QSE_pins
 
-Samtec_QSE-040-01-x-D-A_P0.8mm_Vertical:
-  <<: *QSE-040-01-x-D
+Samtec_QSE-040-xx-x-D-A_P0.8mm_Vertical:
+  <<: *QSE-040-xx-x-D
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 40.13, y: 2.67}
 
 # QSE family; 3 banks
-Samtec_QSE-060-01-x-D_P0.8mm_Vertical: &QSE-060-01-x-D
+Samtec_QSE-060-xx-x-D_P0.8mm_Vertical: &QSE-060-xx-x-D
   meta: *QSE_meta
   layout: {type: 'Socket', width: 61.28, height: 7.24}
   banks: {n: 3, diff: 0, slots: 40, space: 20.0, width: 16.0, height: 3.8}
   pins: *QSE_pins
 
-Samtec_QSE-060-01-x-D-A_P0.8mm_Vertical:
-  <<: *QSE-060-01-x-D
+Samtec_QSE-060-xx-x-D-A_P0.8mm_Vertical:
+  <<: *QSE-060-xx-x-D
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 60.13, y: 2.67}
 
 # QSE family; 1 bank; differential
-Samtec_QSE-014-01-x-D-DP_P0.8mm_Vertical: &QSE-014-01-x-D-DP
+Samtec_QSE-014-xx-x-D-DP_P0.8mm_Vertical: &QSE-014-xx-x-D-DP
   meta: &QSE-DP_meta
     description: *QPairs_desc
     tags: 'connector Samtec QPairs QSE mezzanine socket vertical differential'
@@ -720,34 +720,34 @@ Samtec_QSE-014-01-x-D-DP_P0.8mm_Vertical: &QSE-014-01-x-D-DP
   banks: {n: 1, diff: 1, slots: 40, space: 20.0, width: 16.0, height: 3.8}
   pins: *QSE_pins
 
-Samtec_QSE-014-01-x-D-DP-A_P0.8mm_Vertical:
-  <<: *QSE-014-01-x-D-DP
+Samtec_QSE-014-xx-x-D-DP-A_P0.8mm_Vertical:
+  <<: *QSE-014-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 20.13, y: 2.67}
 
 # QSE family; 2 banks; differential
-Samtec_QSE-028-01-x-D-DP_P0.8mm_Vertical: &QSE-028-01-x-D-DP
+Samtec_QSE-028-xx-x-D-DP_P0.8mm_Vertical: &QSE-028-xx-x-D-DP
   meta: *QSE-DP_meta
   layout: {type: 'Socket', width: 41.28, height: 7.24}
   banks: {n: 2, diff: 2, slots: 40, space: 20.0, width: 16.0, height: 3.8}
   pins: *QSE_pins
 
-Samtec_QSE-028-01-x-D-DP-A_P0.8mm_Vertical:
-  <<: *QSE-028-01-x-D-DP
+Samtec_QSE-028-xx-x-D-DP-A_P0.8mm_Vertical:
+  <<: *QSE-028-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 40.13, y: 2.67}
 
 # QSE family; 3 banks; differential
-Samtec_QSE-042-01-x-D-DP_P0.8mm_Vertical: &QSE-042-01-x-D-DP
+Samtec_QSE-042-xx-x-D-DP_P0.8mm_Vertical: &QSE-042-xx-x-D-DP
   meta: *QSE-DP_meta
   layout: {type: 'Socket', width: 61.28, height: 7.24}
   banks: {n: 3, diff: 3, slots: 40, space: 20.0, width: 16.0, height: 3.8}
   pins: *QSE_pins
 
-Samtec_QSE-042-01-x-D-DP-A_P0.8mm_Vertical:
-  <<: *QSE-042-01-x-D-DP
+Samtec_QSE-042-xx-x-D-DP-A_P0.8mm_Vertical:
+  <<: *QSE-042-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
     - {drill: 1.02, space: 60.13, y: 2.67}

From bd45310107adc76b1c4d527cf4106d73f93f8ce9 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sat, 20 Jul 2019 23:50:20 -0700
Subject: [PATCH 16/62] Clean up in QStrip_Vertical.py: simplify ground pad
 code and replace silkscreen dot with arrow in socket mode.

---
 .../Connector_Samtec/QStrip_Vertical.py       | 56 +++++++++----------
 1 file changed, 27 insertions(+), 29 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
index 23f98ac34..c01ec770e 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
@@ -148,23 +148,20 @@ def generate_one_footprint(param, config, default_lib):
             n += 1
     
     # Ground pad parameters
-    gnd_height    = param['pins']['ground']['height']
-    gnd_width_out = param['pins']['ground']['width'][0]
-    gnd_width_in  = param['pins']['ground']['width'][1]
-    gnd_space_out = param['pins']['ground']['space'][0] / 2
-    gnd_space_in  = param['pins']['ground']['space'][1] / 2
-    gnd_space = [-gnd_space_out, -gnd_space_in, gnd_space_in, gnd_space_out]
-    gnd_size  = [(gnd_width_out, gnd_height),
-                 (gnd_width_in,  gnd_height),
-                 (gnd_width_in,  gnd_height),
-                 (gnd_width_out, gnd_height)]
+    gnd_h = param['pins']['ground']['height']
+    gnd_w = {'out': param['pins']['ground']['width'][0],
+             'in' : param['pins']['ground']['width'][1]}
+    gnd_s = {'out': param['pins']['ground']['space'][0] / 2,
+             'in' : param['pins']['ground']['space'][1] / 2}
+
     # Place ground plane pads
     for b in range(banks):
         mid = bank1_mid + b*bank_x # Bank midpoint
-        for i in range(len(gnd_space)):
+        for s in (-gnd_s['out'], -gnd_s['in'], gnd_s['in'], gnd_s['out']):
+            w = gnd_w['out'] if abs(s) == gnd_s['out'] else gnd_w['in']
             pad = Pad(number = str(n),
-                      at = (mid+gnd_space[i], 0),
-                      size = gnd_size[i],
+                      at = (mid + s, 0),
+                      size = (w, gnd_h),
                       type = Pad.TYPE_SMT,
                       layers = Pad.LAYERS_SMT,
                       shape = Pad.SHAPE_RECT)
@@ -189,7 +186,7 @@ def generate_one_footprint(param, config, default_lib):
     ############################################################################
     # Fabrication layer: F.Fab
     fab_line = config['fab_line_width']
-    fab_mark = pitch #config['fab_pin1_marker_length']
+    fab_mark = config['fab_pin1_marker_length']
     fab_w = param['layout']['width'] if 'width' not in param else param['width']
     fab_h = param['layout']['height']
     fab_y = fab_h / 2
@@ -262,14 +259,15 @@ def generate_one_footprint(param, config, default_lib):
     ############################################################################
     # Silkscreen: F.SilkS
     #silk_offset = param['layout']['silk-offset']
-    silk_offset_fab = config['silk_fab_offset']
-    silk_pad = config['silk_pad_clearance'] + pad_w/2
+    silk_offset = config['silk_fab_offset']
+    silk_pad_x = config['silk_pad_clearance'] + pad_w/2
+    silk_pad_y = config['silk_pad_clearance'] + pad_h/2
     silk_line = config['silk_line_width']
-    silk_y = fab_y + silk_offset_fab
-    silk_lEdge = lEdge - silk_offset_fab
-    silk_rEdge = rEdge + silk_offset_fab
-    silk_chamfer = chamfer + silk_offset_fab/2
-    silk_pin1 = pin1.x - silk_pad
+    silk_y = fab_y + silk_offset
+    silk_lEdge = lEdge - silk_offset
+    silk_rEdge = rEdge + silk_offset
+    silk_chamfer = chamfer + silk_offset/2
+    silk_pin1 = pin1.x - silk_pad_x
     
     if mode == 'Terminal':
         # Polygon left end outline points
@@ -290,11 +288,11 @@ def generate_one_footprint(param, config, default_lib):
                      {'x': silk_lEdge, 'y': -silk_y},
                      {'x': silk_pin1,  'y': -silk_y}]
         # Pin 1 indicator
-        r = 0.075 
-        fp.append(Circle(center = (pin1.x, pin1.y + pad_h/2 + silk_pad),
-                         radius = r,
-                         layer  = "F.SilkS",
-                         width  = 0.15))
+        fp.append(markerArrow(x = pin1.x,
+                              y = pin1.y + silk_pad_y,
+                              width = fab_mark / 2,
+                              line_width = silk_line,
+                              layer = "F.SilkS"))
 
     # Generate right end outline
     silk_rEnd = deepcopy(silk_lEnd)
@@ -303,7 +301,7 @@ def generate_one_footprint(param, config, default_lib):
         silk_rEnd[i]['x'] = -silk_rEnd[i]['x']
     # Define right outline inner offset from the last pin
     # (if the last bank is differential, it does not perfectly mirror the first)
-    silk_rEnd[0]['x'] = silk_rEnd[-1]['x'] = pin[-1][-1]['x'] + silk_pad
+    silk_rEnd[0]['x'] = silk_rEnd[-1]['x'] = pin[-1][-1]['x'] + silk_pad_x
 
     # Draw left and right end outlines
     fp.append(PolygoneLine(nodes = silk_lEnd,
@@ -315,8 +313,8 @@ def generate_one_footprint(param, config, default_lib):
 
     # Draw outlines between banks
     for b in range(banks-1):
-        fp.extend([Line(start = (pin[b][-1]['x']  + silk_pad, m*silk_y),
-                        end   = (pin[b+1][0]['x'] - silk_pad, m*silk_y),
+        fp.extend([Line(start = (pin[b][-1]['x']  + silk_pad_x, m*silk_y),
+                        end   = (pin[b+1][0]['x'] - silk_pad_x, m*silk_y),
                         layer = "F.SilkS",
                         width = silk_line) for m in (-1,1)])
 

From dd87a8027294eb43086548679e2c908e8abca3bf Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sat, 20 Jul 2019 23:54:21 -0700
Subject: [PATCH 17/62] Minor clean-up

---
 .../Connector/Connector_Samtec/QStrip_Vertical.py  | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
index c01ec770e..5da01ec43 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
@@ -260,14 +260,14 @@ def generate_one_footprint(param, config, default_lib):
     # Silkscreen: F.SilkS
     #silk_offset = param['layout']['silk-offset']
     silk_offset = config['silk_fab_offset']
-    silk_pad_x = config['silk_pad_clearance'] + pad_w/2
-    silk_pad_y = config['silk_pad_clearance'] + pad_h/2
+    silk_pad = {'x': config['silk_pad_clearance'] + pad_w/2,
+                'y': config['silk_pad_clearance'] + pad_h/2}
     silk_line = config['silk_line_width']
     silk_y = fab_y + silk_offset
     silk_lEdge = lEdge - silk_offset
     silk_rEdge = rEdge + silk_offset
     silk_chamfer = chamfer + silk_offset/2
-    silk_pin1 = pin1.x - silk_pad_x
+    silk_pin1 = pin1.x - silk_pad['x']
     
     if mode == 'Terminal':
         # Polygon left end outline points
@@ -289,7 +289,7 @@ def generate_one_footprint(param, config, default_lib):
                      {'x': silk_pin1,  'y': -silk_y}]
         # Pin 1 indicator
         fp.append(markerArrow(x = pin1.x,
-                              y = pin1.y + silk_pad_y,
+                              y = pin1.y + silk_pad['y'],
                               width = fab_mark / 2,
                               line_width = silk_line,
                               layer = "F.SilkS"))
@@ -301,7 +301,7 @@ def generate_one_footprint(param, config, default_lib):
         silk_rEnd[i]['x'] = -silk_rEnd[i]['x']
     # Define right outline inner offset from the last pin
     # (if the last bank is differential, it does not perfectly mirror the first)
-    silk_rEnd[0]['x'] = silk_rEnd[-1]['x'] = pin[-1][-1]['x'] + silk_pad_x
+    silk_rEnd[0]['x'] = silk_rEnd[-1]['x'] = pin[-1][-1]['x'] + silk_pad['x']
 
     # Draw left and right end outlines
     fp.append(PolygoneLine(nodes = silk_lEnd,
@@ -313,8 +313,8 @@ def generate_one_footprint(param, config, default_lib):
 
     # Draw outlines between banks
     for b in range(banks-1):
-        fp.extend([Line(start = (pin[b][-1]['x']  + silk_pad_x, m*silk_y),
-                        end   = (pin[b+1][0]['x'] - silk_pad_x, m*silk_y),
+        fp.extend([Line(start = (pin[b][-1]['x']  + silk_pad['x'], m*silk_y),
+                        end   = (pin[b+1][0]['x'] - silk_pad['x'], m*silk_y),
                         layer = "F.SilkS",
                         width = silk_line) for m in (-1,1)])
 

From 4f51e1855dab2c8b05ad44b74eb7a9bca8004b4b Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sun, 21 Jul 2019 08:55:14 -0700
Subject: [PATCH 18/62] Rename QStrip_Vertical* to QStrip_QPairs_Vertical* and
 update metadata

---
 ..._Vertical.py => QStrip_QPairs_Vertical.py} |  2 +-
 ...tical.yaml => QStrip_QPairs_Vertical.yaml} | 28 +++++++++----------
 2 files changed, 15 insertions(+), 15 deletions(-)
 rename scripts/Connector/Connector_Samtec/{QStrip_Vertical.py => QStrip_QPairs_Vertical.py} (99%)
 rename scripts/Connector/Connector_Samtec/{QStrip_Vertical.yaml => QStrip_QPairs_Vertical.yaml} (95%)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
similarity index 99%
rename from scripts/Connector/Connector_Samtec/QStrip_Vertical.py
rename to scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
index 5da01ec43..1c94bbfd7 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
@@ -404,7 +404,7 @@ def generate_one_footprint(param, config, default_lib):
                         default='../conn_config_KLCv3.yaml',
                         help='Series KLC configuration YAML file')
     parser.add_argument('--library', type=str, nargs='?',
-                        default='Connector_Samtec_QStrip',
+                        default='Connector_Samtec_QStrip_QPairs',
                         help='Default KiCad library name (without extension)')
     parser.add_argument('files', metavar='file', type=str, nargs='*',
                         help='YAML file(s) containing footprint parameters')
diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
similarity index 95%
rename from scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
rename to scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
index 2da816b76..dc8a6a3a8 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
@@ -5,7 +5,7 @@ Samtec_QTH-030-xx-x-D_P0.5mm_Vertical: &QTH-030-xx-x-D
     description: &QStrip_desc >-
       Samtec {pn:s} {pitch:1.2f}mm Q Strip® High-Speed Ground Plane {type:s} Strip;
       {banks:d} bank(s), {pins:d} pins/bank; {ds:s}
-    tags: 'connector Samtec QStrip QTH mezzanine terminal vertical single-ended'
+    tags: 'connector Samtec Q-Strip QTH mezzanine terminal vertical single-ended'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf)
@@ -83,7 +83,7 @@ Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical: &QTH-020-xx-x-D-DP
     description: &QPairs_desc >-
       Samtec {pn:s} {pitch:1.2f}mm Q Pairs® High-Speed Ground Plane {type:s} Strip,
       Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank; {ds:s}
-    tags: 'connector Samtec QPairs QTH mezzanine terminal vertical differential'
+    tags: 'connector Samtec Q-Pairs QTH mezzanine terminal vertical differential'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf)
@@ -160,7 +160,7 @@ Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical:
     pn: 'ASP-122952-01'
     datasheet: '[drawing/footprint](http://suddendocs.samtec.com/prints/asp-122952-01-mkt.pdf)'
     tags: >-
-      connector Samtec QStrip QPairs HSMC card terminal mezzanine vertical
+      connector Samtec Q-Strip QPairs HSMC card terminal mezzanine vertical
       single-ended differential alignment-pins application-specific'
     description: >-
       Samtec {pn:s} HSMC Card {type:s}; modified QTH-090-01-L-D-A,
@@ -176,7 +176,7 @@ Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical:
 Samtec_QSH-030-xx-x-D_P0.5mm_Vertical: &QSH-030-xx-x-D
   meta: &QSH_meta
     description: *QStrip_desc
-    tags: 'connector Samtec QStrip QSH mezzanine socket vertical single-ended'
+    tags: 'connector Samtec Q-Strip QSH mezzanine socket vertical single-ended'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-xx-footprint.pdf)
@@ -240,7 +240,7 @@ Samtec_QSH-090-xx-x-D-A_P0.5mm_Vertical:
 Samtec_QSH-020-xx-x-D-DP_P0.5mm_Vertical: &QSH-020-xx-x-D-DP
   meta: &QSH-DP_meta
     description: *QPairs_desc
-    tags: 'connector Samtec QPairs QSH mezzanine socket vertical differential'
+    tags: 'connector Samtec Q-Pairs QSH mezzanine socket vertical differential'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-dp-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-dp-xx-footprint.pdf)
@@ -301,7 +301,7 @@ Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
     pn: 'ASP-122953-01'
     datasheet: '[drawing/footprint](http://suddendocs.samtec.com/prints/asp-122953-01-mkt.pdf)'
     tags: >-
-      connector Samtec QStrip QPairs HSMC host socket mezzanine vertical
+      connector Samtec Q-Strip QPairs HSMC host socket mezzanine vertical
       single-ended differential application-specific
     description: >-
       Samtec {pn:s} HSMC Host {type:s}; modified QSH-090-01-L-D-A,
@@ -317,7 +317,7 @@ Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
 Samtec_QTS-025-xx-x-D_P0.635mm_Vertical: &QTS-025-xx-x-D
   meta: &QTS_meta
     description: *QStrip_desc
-    tags: 'connector Samtec QStrip QTS mezzanine terminal vertical'
+    tags: 'connector Samtec Q-Strip QTS mezzanine terminal vertical'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qts-xxx-xx-x-d-xx-footprint.pdf)
@@ -363,7 +363,7 @@ Samtec_QTS-075-xx-x-D-A_P0.635mm_Vertical:
 Samtec_QTS-016-xx-x-D-DP_P0.635mm_Vertical: &QTS-016-xx-x-D-DP
   meta: &QTS-DP_meta
     description: *QPairs_desc
-    tags: 'connector Samtec QPairs QTS mezzanine terminal vertical differential'
+    tags: 'connector Samtec Q-Pairs QTS mezzanine terminal vertical differential'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-dp-xx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qts-xxx-xx-x-d-dp-xx-footprint.pdf)
@@ -426,7 +426,7 @@ Samtec_QTS-048-xx-x-D-DP-A_P0.635mm_Vertical:
 Samtec_QSS-025-xx-x-D_P0.635mm_Vertical: &QSS-025-xx-x-D
   meta: &QSS_meta
     description: *QStrip_desc
-    tags: 'connector Samtec QStrip QSS mezzanine socket vertical single-ended'
+    tags: 'connector Samtec Q-Strip QSS mezzanine socket vertical single-ended'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qss-xxx-xx-xxx-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qss-xxx-xx-x-d-xx-footprint.pdf)
@@ -472,7 +472,7 @@ Samtec_QSS-075-xx-x-D-A_P0.635mm_Vertical:
 Samtec_QSS-016-xx-x-D-DP_P0.635mm_Vertical: &QSS-016-xx-x-D-DP
   meta: &QSS-DP_meta
     description: *QPairs_desc
-    tags: 'connector Samtec QPairs QSS mezzanine socket vertical differential'
+    tags: 'connector Samtec Q-Pairs QSS mezzanine socket vertical differential'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qss-xxx-xx-xxx-d-dp-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qss-xxx-xx-x-d-dp-xx-footprint.pdf)
@@ -535,7 +535,7 @@ Samtec_QSS-048-xx-x-D-DP-A_P0.635mm_Vertical:
 Samtec_QTE-020-xx-x-D_P0.8mm_Vertical: &QTE-020-xx-x-D
   meta: &QTE_meta
     description: *QStrip_desc
-    tags: 'connector Samtec QStrip QTE mezzanine terminal vertical'
+    tags: 'connector Samtec Q-Strip QTE mezzanine terminal vertical'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-xxx-footprint.pdf)
@@ -597,7 +597,7 @@ Samtec_QTE-060-xx-x-D-A_P0.8mm_Vertical:
 Samtec_QTE-014-xx-x-D-DP_P0.8mm_Vertical: &QTE-014-xx-x-D-DP
   meta: &QTE-DP_meta
     description: *QPairs_desc
-    tags: 'connector Samtec QPairs QTE mezzanine terminal vertical differential'
+    tags: 'connector Samtec Q-Pairs QTE mezzanine terminal vertical differential'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-dp-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qte-xxx-xx-x-d-dp-xx-footprint.pdf)
@@ -658,7 +658,7 @@ Samtec_QTE-042-xx-x-D-DP-A_P0.8mm_Vertical:
 Samtec_QSE-020-xx-x-D_P0.8mm_Vertical: &QSE-020-xx-x-D
   meta: &QSE_meta
     description: *QStrip_desc
-    tags: 'connector Samtec QStrip QSE mezzanine socket vertical single-ended'
+    tags: 'connector Samtec Q-Strip QSE mezzanine socket vertical single-ended'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qse-xxx-xx-xxx-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qse-xxx-xx-x-d-xx-footprint.pdf)
@@ -712,7 +712,7 @@ Samtec_QSE-060-xx-x-D-A_P0.8mm_Vertical:
 Samtec_QSE-014-xx-x-D-DP_P0.8mm_Vertical: &QSE-014-xx-x-D-DP
   meta: &QSE-DP_meta
     description: *QPairs_desc
-    tags: 'connector Samtec QPairs QSE mezzanine socket vertical differential'
+    tags: 'connector Samtec Q-Pairs QSE mezzanine socket vertical differential'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qse-xxx-xx-xxx-d-dp-xxx-xxxxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qse-xxx-xx-x-d-dp-xxx-footprint.pdf)

From c8d90f113caeb95ab3e91df7f18d40697ac100f2 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Mon, 22 Jul 2019 00:01:17 -0700
Subject: [PATCH 19/62] QStrip_QPairs_Vertical.py: rewrite ground pad code to
 make it generic

---
 .../QStrip_QPairs_Vertical.py                 | 31 ++++++++++++-------
 1 file changed, 19 insertions(+), 12 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
index 1c94bbfd7..9c9fe86bc 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
@@ -149,24 +149,24 @@ def generate_one_footprint(param, config, default_lib):
     
     # Ground pad parameters
     gnd_h = param['pins']['ground']['height']
-    gnd_w = {'out': param['pins']['ground']['width'][0],
-             'in' : param['pins']['ground']['width'][1]}
-    gnd_s = {'out': param['pins']['ground']['space'][0] / 2,
-             'in' : param['pins']['ground']['space'][1] / 2}
-
+    # Combine spacing and width data into a zipped list: [(space,width), ...]
+    gnd_sw = [sw for sw in zip(param['pins']['ground']['space'],
+                               param['pins']['ground']['width'])]
+    gnd_sw.sort() # Sort from lowest (inner) to highest (outer) spacing
+    
     # Place ground plane pads
     for b in range(banks):
         mid = bank1_mid + b*bank_x # Bank midpoint
-        for s in (-gnd_s['out'], -gnd_s['in'], gnd_s['in'], gnd_s['out']):
-            w = gnd_w['out'] if abs(s) == gnd_s['out'] else gnd_w['in']
+        # Iterate through space/width list to generate ground pads...
+        for (space, width) in [(-s,w) for s,w in reversed(gnd_sw)] + gnd_sw:
             pad = Pad(number = str(n),
-                      at = (mid + s, 0),
-                      size = (w, gnd_h),
+                      at = (mid + space/2, 0),
+                      size = (width, gnd_h),
                       type = Pad.TYPE_SMT,
                       layers = Pad.LAYERS_SMT,
                       shape = Pad.SHAPE_RECT)
             fp.append(pad)
-            n = n + 1
+            n += 1
 
     ############################################################################
     # Holes
@@ -247,14 +247,21 @@ def generate_one_footprint(param, config, default_lib):
                               close = False,
                               line_width = fab_line))
 
-    # Draw bank outlines
+    # Draw bank and ground plane outlines
     for b in range(banks):
         mid = bank1_mid + b*bank_x
+        # Bank outline
         fp.append(RectLine(start = (mid-bank_w/2, -bank_h/2),
                            end   = (mid+bank_w/2,  bank_h/2),
                            layer = "F.Fab",
                            width = fab_line))
-                           
+        # Ground planes
+        #for m in (-1,1):
+        #    fp.append(Line(start = (mid-bank_w/2, m*gnd_h/2),
+        #                   end   = (mid+bank_w/2, m*gnd_h/2),
+        #                   layer = "F.Fab",
+        #                   width = fab_line))
+
     
     ############################################################################
     # Silkscreen: F.SilkS

From 95d5d9aa23ce353c972a807d16a720e31e25019d Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Mon, 22 Jul 2019 10:53:47 -0700
Subject: [PATCH 20/62] Clean up QStrip_QPairs_Vertical.py

---
 .../QStrip_QPairs_Vertical.py                 | 60 ++++++++-----------
 .../QStrip_QPairs_Vertical.yaml               |  4 +-
 2 files changed, 28 insertions(+), 36 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
index 9c9fe86bc..970c29d8a 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
@@ -5,32 +5,32 @@
 
 ---
 Footprint_Name:
-  library: 'library name' # [optional] KiCad library to use
+  library: 'library name' # [optional] KiCad library to use, overrides default
   meta: # Footprint metadata
-    pn: 'part number' # [optional], overrides automatic part number detection
+    pn: 'part number' # [optional] overrides automatic part number detection
     description: 'Brief description of the footprint'
-    datasheet: 'URL to footprint datasheet'
+    datasheet: 'URL(s) to footprint datasheet'
     tags: 'KiCad tags go here'
-  tags: 'more tags' # [optional], used to extend the tag list
-  layout:
-    type: '(Terminal|Socket)'
-    width: !!float mm # width
-    height: !!float mm # height
-  width: !!float mm # [optional] overrides layout::width
+  add-tags: 'more tags' # [optional] extends the tag list
+  layout: # General footprint layout/drawing data
+    type: '(Terminal|Socket)' # sets Pin 1 position and drawing mode
+    width: !!float mm # [cosmetic] overall width of the connector
+    height: !!float mm # [cosmetic] overall height of the connector
+  width: !!float mm # [optional, cosmetic] overrides layout::width
   banks:
-    n: !!int # number of banks in the connector
-    slots: !!int even # number of pin positions in a bank
-    diff: !!int <= n # number of differential banks
+    n: !!uint # number of banks in the connector
+    diff: !!uint # number of differential banks
+    slots: !!uint even # number of pin positions in a bank
     space: !!float mm # distance between adjacent banks
-    width: !!float mm # Width of outline on F.Fab
-    height: !!float mm # Height of outline on F.Fab
+    width: !!float mm # width of bank outline drawn on F.Fab
+    height: !!float mm # height of bank outline drawn on F.Fab
   pins:
-    signal: # Signal pin parameters
+    signal: # signal pin parameters
       pitch: !!float mm
       width: !!float mm # Pad width
       height: !!float mm # Pad height
       y: !!float mm # vertical offset
-    ground: # Ground pin parameters
+    ground: # ground pin parameters
       width:
         - !!float mm # outer pins 
         - !!float mm # inner pins
@@ -38,12 +38,12 @@
       space: # Distance between ground pads within each bank
         - !!float mm # outer pins
         - !!float mm # inner pins
-  holes: # [optional] hole pair specifications
+  holes: # [optional] hole pair specifications, mirrored about y axis
     - # Hole spec. 1
       name: "" # [optional] name/number for plated holes
       drill: !!float mm # drill diameter (a list produces an oval)
       pad: !!float mm # [optional] PTH pad diameter (a list produces an oval)
-      space: !!float mm # distance between holes mirrored about the x-axis
+      space: !!float mm # distance between holes mirrored about the y-axis
       y: !!float mm # vertical offset
     - # Hole spec. 2...
 ...
@@ -255,13 +255,6 @@ def generate_one_footprint(param, config, default_lib):
                            end   = (mid+bank_w/2,  bank_h/2),
                            layer = "F.Fab",
                            width = fab_line))
-        # Ground planes
-        #for m in (-1,1):
-        #    fp.append(Line(start = (mid-bank_w/2, m*gnd_h/2),
-        #                   end   = (mid+bank_w/2, m*gnd_h/2),
-        #                   layer = "F.Fab",
-        #                   width = fab_line))
-
     
     ############################################################################
     # Silkscreen: F.SilkS
@@ -359,11 +352,7 @@ def generate_one_footprint(param, config, default_lib):
     
     # Part number
     partnum = param['meta'].get('pn', param['name'].split('_')[1])
-    #if 'pn' in param['meta']:
-    #    partnum = param['meta']['pn']
-    #else:
-    #    partnum = param['name'].split('_')[1]
-        
+
     # Pins or pairs/bank
     if param['banks']['diff'] == banks:
         # Differential mode: round up to nearest even number of pairs
@@ -446,13 +435,16 @@ def generate_one_footprint(param, config, default_lib):
                     continue
 
                 for fp_name in footprints:
-                    print("  - Generate {}.kicad_mod".format(fp_name))
-                    fp_params = footprints.get(fp_name)
-                    
+                    fp_params = footprints.get(fp_name)                    
                     if 'name' in fp_params:
                         print("WARNING: setting 'name' to", fp_name)
-                    
+                        
                     fp_params['name'] = fp_name
+
+                    bprint("  - ",
+                          fp_params.get('library', args.library), ".pretty/",
+                          fp_name, ".kicad_mod", sep="")
+                    
                     generate_one_footprint(fp_params, config, args.library)
             except yaml.YAMLError as exc:
                 print(exc)
diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
index dc8a6a3a8..836543b92 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
@@ -3,7 +3,7 @@
 Samtec_QTH-030-xx-x-D_P0.5mm_Vertical: &QTH-030-xx-x-D
   meta: &QTH_meta
     description: &QStrip_desc >-
-      Samtec {pn:s} {pitch:1.2f}mm Q Strip® High-Speed Ground Plane {type:s} Strip;
+      Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip;
       {banks:d} bank(s), {pins:d} pins/bank; {ds:s}
     tags: 'connector Samtec Q-Strip QTH mezzanine terminal vertical single-ended'
     datasheet: >-
@@ -81,7 +81,7 @@ Samtec_QTH-090-xx-x-D-A_P0.5mm_Vertical:
 Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical: &QTH-020-xx-x-D-DP
   meta: &QTH-DP_meta
     description: &QPairs_desc >-
-      Samtec {pn:s} {pitch:1.2f}mm Q Pairs® High-Speed Ground Plane {type:s} Strip,
+      Samtec {pn:s} {pitch:1.2f}mm Q Pairs High-Speed Ground Plane {type:s} Strip,
       Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank; {ds:s}
     tags: 'connector Samtec Q-Pairs QTH mezzanine terminal vertical differential'
     datasheet: >-

From 35b9416740af6075206082a51b8a8bc2aee3db1e Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Mon, 22 Jul 2019 11:14:51 -0700
Subject: [PATCH 21/62] Add heading comments to QStrip_QPairs_Vertical*

---
 .../QStrip_QPairs_Vertical.py                 |  16 +-
 .../QStrip_QPairs_Vertical.yaml               | 311 +++++++++---------
 2 files changed, 177 insertions(+), 150 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
index 970c29d8a..c2d40c313 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
@@ -1,8 +1,22 @@
 #!/usr/bin/python
 
 """
-YAML footprint specification
+This file is part of kicad-footprint-generator.
+
+kicad-footprint-generator is free software: you can redistribute it and/or
+modify it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or (at your
+option) any later version.
+
+kicad-footprint-generator is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+more details. You should have received a copy of the GNU General Public License
+along with kicad-footprint-generator. If not, see <http://www.gnu.org/licenses/>.
+"""
 
+"""
+YAML footprint specification
 ---
 Footprint_Name:
   library: 'library name' # [optional] KiCad library to use, overrides default
diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
index 836543b92..947a29574 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
@@ -1,3 +1,16 @@
+# This file contains footprint specifications the vertical variations of Samtec
+# Q Strip and Q Pairs connectors. QStrip_QPairs_Vertical.py, contains a complete
+# specification of the properties and data types that can be used in this file.
+# Several non-standard (or uncommon) configurations of Q Strip and Q Pairs
+# connectors were added during the development process, but have since been
+# commented out in order to avoid cluttering the KiCad footprint library. Such
+# configurations are denoted with a double-comment followed by a space ("## ").
+#
+# Links:
+#   - [Q Strip](https://www.samtec.com/connectors/high-speed-board-to-board/mezzanine/qstrip)
+#   - [Q Pairs](https://www.samtec.com/connectors/high-speed-board-to-board/mezzanine/qpairs)
+# 
+
 ################################################################################
 # QTH family; 1 bank
 Samtec_QTH-030-xx-x-D_P0.5mm_Vertical: &QTH-030-xx-x-D
@@ -21,20 +34,20 @@ Samtec_QTH-030-xx-x-D-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 18.48, y: -2.03}
 
-##Samtec_QTH-030-xx-x-D-L_P0.5mm_Vertical:
-##  <<: *QTH-030-xx-x-D
-##  add-tags: 'latching'
-##  width: 23.0
-##  holes:
-##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
-##
-##Samtec_QTH-030-xx-x-D-A-L_P0.5mm_Vertical:
-##  <<: *QTH-030-xx-x-D
-##  add-tags: 'alignment-pins latching'
-##  width: 23.0
-##  holes:
-##    - {drill: 1.02, space: 18.48, y: -2.03}
-##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
+## Samtec_QTH-030-xx-x-D-L_P0.5mm_Vertical:
+##   <<: *QTH-030-xx-x-D
+##   add-tags: 'latching'
+##   width: 23.0
+##   holes:
+##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
+## 
+## Samtec_QTH-030-xx-x-D-A-L_P0.5mm_Vertical:
+##   <<: *QTH-030-xx-x-D
+##   add-tags: 'alignment-pins latching'
+##   width: 23.0
+##   holes:
+##     - {drill: 1.02, space: 18.48, y: -2.03}
+##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
 
 # QTH family; 2 banks
 Samtec_QTH-060-xx-x-D_P0.5mm_Vertical: &QTH-060-xx-x-D
@@ -49,20 +62,20 @@ Samtec_QTH-060-xx-x-D-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 38.48, y: -2.03}
 
-##Samtec_QTH-060-xx-x-D-L_P0.5mm_Vertical:
-##  <<: *QTH-060-xx-x-D
-##  add-tags: 'latching'
-##  width: 43.0
-##  holes:
-##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
-##
-##Samtec_QTH-060-xx-x-D-A-L_P0.5mm_Vertical:
-##  <<: *QTH-060-xx-x-D
-##  add-tags: 'alignment-pins latching'
-##  width: 43.0
-##  holes:
-##    - {drill: 1.02, space: 38.48, y: -2.03}
-##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
+## Samtec_QTH-060-xx-x-D-L_P0.5mm_Vertical:
+##   <<: *QTH-060-xx-x-D
+##   add-tags: 'latching'
+##   width: 43.0
+##   holes:
+##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
+## 
+## Samtec_QTH-060-xx-x-D-A-L_P0.5mm_Vertical:
+##   <<: *QTH-060-xx-x-D
+##   add-tags: 'alignment-pins latching'
+##   width: 43.0
+##   holes:
+##     - {drill: 1.02, space: 38.48, y: -2.03}
+##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
 
 # QTH family; 3 banks
 Samtec_QTH-090-xx-x-D_P0.5mm_Vertical: &QTH-090-xx-x-D
@@ -97,20 +110,20 @@ Samtec_QTH-020-xx-x-D-DP-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 18.48, y: -2.03}
 
-##Samtec_QTH-020-xx-x-D-DP-L_P0.5mm_Vertical:
-##  <<: *QTH-020-xx-x-D-DP
-##  add-tags: 'latching'
-##  width: 23.0
-##  holes:
-##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
-##
-##Samtec_QTH-020-xx-x-D-DP-A-L_P0.5mm_Vertical:
-##  <<: *QTH-020-xx-x-D-DP
-##  add-tags: 'alignment-pins latching'
-##  width: 23.0
-##  holes:
-##    - {drill: 1.02, space: 18.48, y: -2.03}
-##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
+## Samtec_QTH-020-xx-x-D-DP-L_P0.5mm_Vertical:
+##   <<: *QTH-020-xx-x-D-DP
+##   add-tags: 'latching'
+##   width: 23.0
+##   holes:
+##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
+## 
+## Samtec_QTH-020-xx-x-D-DP-A-L_P0.5mm_Vertical:
+##   <<: *QTH-020-xx-x-D-DP
+##   add-tags: 'alignment-pins latching'
+##   width: 23.0
+##   holes:
+##     - {drill: 1.02, space: 18.48, y: -2.03}
+##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
 
 # QTH family; 2 banks; differential
 Samtec_QTH-040-xx-x-D-DP_P0.5mm_Vertical: &QTH-040-xx-x-D-DP
@@ -125,20 +138,20 @@ Samtec_QTH-040-xx-x-D-DP-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 38.48, y: -2.03}
 
-##Samtec_QTH-040-xx-x-D-DP-L_P0.5mm_Vertical:
-##  <<: *QTH-040-xx-x-D-DP
-##  add-tags: 'latching'
-##  width: 43.0
-##  holes:
-##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
-##
-##Samtec_QTH-040-xx-x-D-DP-A-L_P0.5mm_Vertical:
-##  <<: *QTH-040-xx-x-D-DP
-##  add-tags: 'alignment-pins latching'
-##  width: 43.0
-##  holes:
-##    - {drill: 1.02, space: 38.48, y: -2.03}
-##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
+## Samtec_QTH-040-xx-x-D-DP-L_P0.5mm_Vertical:
+##   <<: *QTH-040-xx-x-D-DP
+##   add-tags: 'latching'
+##   width: 43.0
+##   holes:
+##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
+## 
+## Samtec_QTH-040-xx-x-D-DP-A-L_P0.5mm_Vertical:
+##   <<: *QTH-040-xx-x-D-DP
+##   add-tags: 'alignment-pins latching'
+##   width: 43.0
+##   holes:
+##     - {drill: 1.02, space: 38.48, y: -2.03}
+##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
 
 # QTH family; 3 banks; differential
 Samtec_QTH-060-xx-x-D-DP_P0.5mm_Vertical: &QTH-060-xx-x-D-DP
@@ -192,11 +205,11 @@ Samtec_QSH-030-xx-x-D-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 20.13, y: 2.03}
 
-##Samtec_QSH-030-xx-x-D-LC_P0.5mm_Vertical:
-##  <<: *QSH-030-xx-x-D
-##  add-tags: 'locking-clips'
-##  holes:
-##    - {drill: 1.19, space: 20.13, y: 2.03}
+## Samtec_QSH-030-xx-x-D-LC_P0.5mm_Vertical:
+##   <<: *QSH-030-xx-x-D
+##   add-tags: 'locking-clips'
+##   holes:
+##     - {drill: 1.19, space: 20.13, y: 2.03}
 
 # QSH family; 2 banks
 Samtec_QSH-060-xx-x-D_P0.5mm_Vertical: &QSH-060-xx-x-D
@@ -211,11 +224,11 @@ Samtec_QSH-060-xx-x-D-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 40.13, y: 2.03}
 
-##Samtec_QSH-060-xx-x-D-LC_P0.5mm_Vertical:
-##  <<: *QSH-060-xx-x-D
-##  add-tags: 'locking-clips'
-##  holes:
-##    - {drill: 1.19, space: 40.13, y: 2.03}
+## Samtec_QSH-060-xx-x-D-LC_P0.5mm_Vertical:
+##   <<: *QSH-060-xx-x-D
+##   add-tags: 'locking-clips'
+##   holes:
+##     - {drill: 1.19, space: 40.13, y: 2.03}
 
 # QSH family; 3 banks
 Samtec_QSH-090-xx-x-D_P0.5mm_Vertical: &QSH-090-xx-x-D
@@ -230,11 +243,11 @@ Samtec_QSH-090-xx-x-D-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 60.13, y: 2.03}
 
-##Samtec_QSH-090-xx-x-D-LC_P0.5mm_Vertical:
-##  <<: *QSH-090-xx-x-D
-##  add-tags: 'locking-clips'
-##  holes:
-##    - {drill: 1.19, space: 60.13, y: 2.03}
+## Samtec_QSH-090-xx-x-D-LC_P0.5mm_Vertical:
+##   <<: *QSH-090-xx-x-D
+##   add-tags: 'locking-clips'
+##   holes:
+##     - {drill: 1.19, space: 60.13, y: 2.03}
 
 # QSH family; 1 bank; differential
 Samtec_QSH-020-xx-x-D-DP_P0.5mm_Vertical: &QSH-020-xx-x-D-DP
@@ -254,11 +267,11 @@ Samtec_QSH-020-xx-x-D-DP-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 20.13, y: 2.03}
 
-##Samtec_QSH-020-xx-x-D-DP-LC_P0.5mm_Vertical:
-##  <<: *QSH-020-xx-x-D-DP
-##  add-tags: 'locking-clips'
-##  holes:
-##    - {drill: 1.19, space: 20.13, y: 2.03}
+## Samtec_QSH-020-xx-x-D-DP-LC_P0.5mm_Vertical:
+##   <<: *QSH-020-xx-x-D-DP
+##   add-tags: 'locking-clips'
+##   holes:
+##     - {drill: 1.19, space: 20.13, y: 2.03}
 
 # QSH family; 2 banks; differential
 Samtec_QSH-040-xx-x-D-DP_P0.5mm_Vertical: &QSH-040-xx-x-D-DP
@@ -272,10 +285,10 @@ Samtec_QSH-040-xx-x-D-DP-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 40.13, y: 2.03}
 
-##Samtec_QSH-040-xx-x-D-DP-LC_P0.5mm_Vertical:
-##  <<: *QSH-040-xx-x-D-DP
-##  holes:
-##    - {drill: 1.19, space: 40.13, y: 2.03}
+## Samtec_QSH-040-xx-x-D-DP-LC_P0.5mm_Vertical:
+##   <<: *QSH-040-xx-x-D-DP
+##   holes:
+##     - {drill: 1.19, space: 40.13, y: 2.03}
 
 # QSH family; 3 banks; differential
 Samtec_QSH-060-xx-x-D-DP_P0.5mm_Vertical: &QSH-060-xx-x-D-DP
@@ -289,10 +302,10 @@ Samtec_QSH-060-xx-x-D-DP-A_P0.5mm_Vertical:
   holes:
     - {drill: 1.02, space: 60.13, y: 2.03}
 
-##Samtec_QSH-060-xx-x-D-DP-LC_P0.5mm_Vertical:
-##  <<: *QSH-060-xx-x-D-DP
-##  holes:
-##    - {drill: 1.19, space: 60.13, y: 2.03}
+## Samtec_QSH-060-xx-x-D-DP-LC_P0.5mm_Vertical:
+##   <<: *QSH-060-xx-x-D-DP
+##   holes:
+##     - {drill: 1.19, space: 60.13, y: 2.03}
 
 # QSH family; 3 banks; specialized
 Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
@@ -377,11 +390,11 @@ Samtec_QTS-016-xx-x-D-DP-A_P0.635mm_Vertical:
   holes:
     - {drill: 1.02, space: 18.48, y: -2.03}
 
-##Samtec_QTS-016-xx-x-D-DP-LC_P0.635mm_Vertical:
-##  <<: *QTS-016-xx-x-D-DP
-##  add-tags: 'locking-clips'
-##  holes:
-##    - {drill: 1.16, space: 18.48, y: -2.03}
+## Samtec_QTS-016-xx-x-D-DP-LC_P0.635mm_Vertical:
+##   <<: *QTS-016-xx-x-D-DP
+##   add-tags: 'locking-clips'
+##   holes:
+##     - {drill: 1.16, space: 18.48, y: -2.03}
 
 # QTS family; 2 banks; differential
 Samtec_QTS-032-xx-x-D-DP_P0.635mm_Vertical: &QTS-032-xx-x-D-DP
@@ -396,11 +409,11 @@ Samtec_QTS-032-xx-x-D-DP-A_P0.635mm_Vertical:
   holes:
     - {drill: 1.02, space: 38.48, y: -2.03}
 
-##Samtec_QTS-032-xx-x-D-DP-LC_P0.635mm_Vertical:
-##  <<: *QTS-032-xx-x-D-DP
-##  add-tags: 'locking-clips'
-##  holes:
-##    - {drill: 1.16, space: 38.48, y: -2.03}
+## Samtec_QTS-032-xx-x-D-DP-LC_P0.635mm_Vertical:
+##   <<: *QTS-032-xx-x-D-DP
+##   add-tags: 'locking-clips'
+##   holes:
+##     - {drill: 1.16, space: 38.48, y: -2.03}
 
 # QTS family; 3 banks; differential
 Samtec_QTS-048-xx-x-D-DP_P0.635mm_Vertical: &QTS-048-xx-x-D-DP
@@ -415,11 +428,11 @@ Samtec_QTS-048-xx-x-D-DP-A_P0.635mm_Vertical:
   holes:
     - {drill: 1.02, space: 58.48, y: -2.03}
 
-##Samtec_QTS-048-xx-x-D-DP-LC_P0.635mm_Vertical:
-##  <<: *QTS-048-xx-x-D-DP
-##  add-tags: 'locking-clips'
-##  holes:
-##    - {drill: 1.16, space: 58.48, y: -2.03}
+## Samtec_QTS-048-xx-x-D-DP-LC_P0.635mm_Vertical:
+##   <<: *QTS-048-xx-x-D-DP
+##   add-tags: 'locking-clips'
+##   holes:
+##     - {drill: 1.16, space: 58.48, y: -2.03}
 
 ################################################################################
 # QSS family; 1 bank
@@ -486,11 +499,11 @@ Samtec_QSS-016-xx-x-D-DP-A_P0.635mm_Vertical:
   holes:
     - {drill: 1.02, space: 20.0, y: 2.67}
 
-##Samtec_QSS-016-xx-x-D-DP-LC_P0.635mm_Vertical:
-##  <<: *QSS-016-xx-x-D-DP
-##  add-tags: 'locking-clips'
-##  holes:
-##    - {drill: 1.16, space: 20.0, y: 2.67}
+## Samtec_QSS-016-xx-x-D-DP-LC_P0.635mm_Vertical:
+##   <<: *QSS-016-xx-x-D-DP
+##   add-tags: 'locking-clips'
+##   holes:
+##     - {drill: 1.16, space: 20.0, y: 2.67}
 
 # QSS family; 2 banks; differential
 Samtec_QSS-032-xx-x-D-DP_P0.635mm_Vertical: &QSS-032-xx-x-D-DP
@@ -505,11 +518,11 @@ Samtec_QSS-032-xx-x-D-DP-A_P0.635mm_Vertical:
   holes:
     - {drill: 1.02, space: 40.0, y: 2.67}
 
-##Samtec_QSS-032-xx-x-D-DP-LC_P0.635mm_Vertical:
-##  <<: *QSS-032-xx-x-D-DP
-##  add-tags: 'locking-clips'
-##  holes:
-##    - {drill: 1.16, space: 40.0, y: 2.67}
+## Samtec_QSS-032-xx-x-D-DP-LC_P0.635mm_Vertical:
+##   <<: *QSS-032-xx-x-D-DP
+##   add-tags: 'locking-clips'
+##   holes:
+##     - {drill: 1.16, space: 40.0, y: 2.67}
 
 # QSS family; 3 banks; differential
 Samtec_QSS-048-xx-x-D-DP_P0.635mm_Vertical: &QSS-048-xx-x-D-DP
@@ -524,11 +537,11 @@ Samtec_QSS-048-xx-x-D-DP-A_P0.635mm_Vertical:
   holes:
     - {drill: 1.02, space: 60.0, y: 2.67}
 
-##Samtec_QSS-048-xx-x-D-DP-LC_P0.635mm_Vertical:
-##  <<: *QSS-048-xx-x-D-DP
-##  add-tags: 'locking-clips'
-##  holes:
-##    - {drill: 1.16, space: 60.0, y: 2.67}
+## Samtec_QSS-048-xx-x-D-DP-LC_P0.635mm_Vertical:
+##   <<: *QSS-048-xx-x-D-DP
+##   add-tags: 'locking-clips'
+##   holes:
+##     - {drill: 1.16, space: 60.0, y: 2.67}
 
 ################################################################################
 # QTE family; 1 bank
@@ -551,13 +564,13 @@ Samtec_QTE-020-xx-x-D-A_P0.8mm_Vertical:
   holes:
     - {drill: 1.02, space: 18.48, y: -2.03}
 
-##Samtec_QTE-020-xx-x-D-A-L_P0.8mm_Vertical:
-##  <<: *QTE-020-xx-x-D
-##  add-tags: 'alignment-pins latching'
-##  width: 23.0
-##  holes:
-##    - {drill: 1.02, space: 18.48, y: -2.03}
-##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
+## Samtec_QTE-020-xx-x-D-A-L_P0.8mm_Vertical:
+##   <<: *QTE-020-xx-x-D
+##   add-tags: 'alignment-pins latching'
+##   width: 23.0
+##   holes:
+##     - {drill: 1.02, space: 18.48, y: -2.03}
+##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
 
 # QTE family; 2 banks
 Samtec_QTE-040-xx-x-D_P0.8mm_Vertical: &QTE-040-xx-x-D
@@ -572,13 +585,13 @@ Samtec_QTE-040-xx-x-D-A_P0.8mm_Vertical:
   holes:
     - {drill: 1.02, space: 38.48, y: -2.03}
 
-##Samtec_QTE-040-xx-x-D-A-L_P0.8mm_Vertical:
-##  <<: *QTE-040-xx-x-D
-##  add-tags: 'alignment-pins latching'
-##  width: 43.0
-##  holes:
-##    - {drill: 1.02, space: 38.48, y: -2.03}
-##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
+## Samtec_QTE-040-xx-x-D-A-L_P0.8mm_Vertical:
+##   <<: *QTE-040-xx-x-D
+##   add-tags: 'alignment-pins latching'
+##   width: 43.0
+##   holes:
+##     - {drill: 1.02, space: 38.48, y: -2.03}
+##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
 
 # QTE family; 3 banks
 Samtec_QTE-060-xx-x-D_P0.8mm_Vertical: &QTE-060-xx-x-D
@@ -611,13 +624,13 @@ Samtec_QTE-014-xx-x-D-DP-A_P0.8mm_Vertical:
   holes:
     - {drill: 1.02, space: 18.48, y: -2.03}
 
-##Samtec_QTE-014-xx-x-D-DP-A-L_P0.8mm_Vertical:
-##  <<: *QTE-014-xx-x-D-DP
-##  add-tags: 'alignment-pins latching'
-##  width: 23.0
-##  holes:
-##    - {drill: 1.02, space: 18.48, y: -2.03}
-##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.51}
+## Samtec_QTE-014-xx-x-D-DP-A-L_P0.8mm_Vertical:
+##   <<: *QTE-014-xx-x-D-DP
+##   add-tags: 'alignment-pins latching'
+##   width: 23.0
+##   holes:
+##     - {drill: 1.02, space: 18.48, y: -2.03}
+##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.51}
 
 # QTE family; 2 banks; differential
 Samtec_QTE-028-xx-x-D-DP_P0.8mm_Vertical: &QTE-028-xx-x-D-DP
@@ -632,13 +645,13 @@ Samtec_QTE-028-xx-x-D-DP-A_P0.8mm_Vertical:
   holes:
     - {drill: 1.02, space: 38.48, y: -2.03}
 
-##Samtec_QTE-028-xx-x-D-DP-A-L_P0.8mm_Vertical:
-##  <<: *QTE-028-xx-x-D-DP
-##  add-tags: 'alignment-pins latching'
-##  width: 23.0
-##  holes:
-##    - {drill: 1.02, space: 38.48, y: -2.03}
-##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.51}
+## Samtec_QTE-028-xx-x-D-DP-A-L_P0.8mm_Vertical:
+##   <<: *QTE-028-xx-x-D-DP
+##   add-tags: 'alignment-pins latching'
+##   width: 23.0
+##   holes:
+##     - {drill: 1.02, space: 38.48, y: -2.03}
+##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.51}
 
 # QTE family; 3 banks; differential
 Samtec_QTE-042-xx-x-D-DP_P0.8mm_Vertical: &QTE-042-xx-x-D-DP
@@ -674,13 +687,13 @@ Samtec_QSE-020-xx-x-D-A_P0.8mm_Vertical:
   holes:
     - {drill: 1.02, space: 20.13, y: 2.67}
 
-##Samtec_QSE-020-xx-x-D-A-L_P0.8mm_Vertical:
-##  <<: *QSE-020-xx-x-D
-##  add-tags: 'alignment-pins latching'
-##  width: 26.61
-##  holes:
-##    - {drill: 1.02, space: 20.13, y: 2.67}
-##    - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 24.36, y: -0.51}
+## Samtec_QSE-020-xx-x-D-A-L_P0.8mm_Vertical:
+##   <<: *QSE-020-xx-x-D
+##   add-tags: 'alignment-pins latching'
+##   width: 26.61
+##   holes:
+##     - {drill: 1.02, space: 20.13, y: 2.67}
+##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 24.36, y: -0.51}
 
 # QSE family; 2 banks
 Samtec_QSE-040-xx-x-D_P0.8mm_Vertical: &QSE-040-xx-x-D

From 82eba245fcc7e150a5a40aef726ddfea0d1715e8 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Mon, 22 Jul 2019 12:09:13 -0700
Subject: [PATCH 22/62] Move markerArrow to helpers.py

---
 .../QStrip_QPairs_Vertical.py                 | 18 +--------
 scripts/Connector/Connector_Samtec/helpers.py | 37 +++++++++++++++++++
 2 files changed, 38 insertions(+), 17 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
index c2d40c313..57233aa87 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
@@ -78,22 +78,6 @@
 from footprint_text_fields import addTextFields
 from helpers import *
 
-def markerArrow(x, y, width, line_width, layer="F.Fab", angle=0, close=True):
-    node = Node()
-    points = [(-width/2, width/2),
-              (0, 0),
-              (width/2, width/2)]
-
-    if close:
-        points.append((-width/2, width/2))
-
-    node.append(PolygoneLine(nodes = points,
-                             layer = layer,
-                             width = line_width))
-    node.insert(Rotation(angle))
-    node.insert(Translation(x,y))
-    return node
-
 def generate_one_footprint(param, config, default_lib):
     fp = Footprint(param['name'])
     
@@ -455,7 +439,7 @@ def generate_one_footprint(param, config, default_lib):
                         
                     fp_params['name'] = fp_name
 
-                    bprint("  - ",
+                    print("  - ",
                           fp_params.get('library', args.library), ".pretty/",
                           fp_name, ".kicad_mod", sep="")
                     
diff --git a/scripts/Connector/Connector_Samtec/helpers.py b/scripts/Connector/Connector_Samtec/helpers.py
index 3a8ba0ff5..86464571c 100644
--- a/scripts/Connector/Connector_Samtec/helpers.py
+++ b/scripts/Connector/Connector_Samtec/helpers.py
@@ -1,4 +1,41 @@
+import sys
+import os
+
+sys.path.append(os.path.join(sys.path[0], "..", "..", ".."))
+import KicadModTree
+
 def roundToBase(value, base):
     if base == 0:
         return value
     return round(value/base) * base
+
+def markerArrow(x, y, width, line_width, layer="F.Fab", angle=0, close=True):
+    """
+    Draws a triangular marker arrow at the specified location.
+    
+    Args:
+        x: x-coordinate of arrow tip
+        y: y-coordinate of arrow tip
+        width: width of the arrow
+        line_width: width of lines forming the arrow
+        layer: PCB layer string (default: "F.Fab")
+        angle: orientation of the arrow in degrees (0° points up)
+        close (bool): True to draw a line closing the triangle
+    
+    Returns:
+        KicadModTree.Node object that generates the marker arrow
+    """
+    node = KicadModTree.Node()
+    points = [(-width/2, width/2),
+              (0, 0),
+              (width/2, width/2)]
+
+    if close:
+        points.append((-width/2, width/2))
+
+    node.append(KicadModTree.PolygoneLine(nodes = points,
+                                          layer = layer,
+                                          width = line_width))
+    node.insert(KicadModTree.Rotation(angle))
+    node.insert(KicadModTree.Translation(x,y))
+    return node

From 1f6fe3bbfcb011f92251cedecd69b146c5a923f1 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Mon, 22 Jul 2019 23:21:43 -0700
Subject: [PATCH 23/62] Add copyright notice to QStrip_QPairs_Vertical.py

---
 scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
index 57233aa87..e9bd35124 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
@@ -13,6 +13,8 @@
 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
 more details. You should have received a copy of the GNU General Public License
 along with kicad-footprint-generator. If not, see <http://www.gnu.org/licenses/>.
+
+Copyright (C) 2019 be Caleb Reister <calebreister@gmail.com>
 """
 
 """

From 91fa1c652c935cee79bbb43090539d9ee3598913 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Mon, 22 Jul 2019 23:22:07 -0700
Subject: [PATCH 24/62] Fix a typo

---
 scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
index e9bd35124..0893fc8ea 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
@@ -14,7 +14,7 @@
 more details. You should have received a copy of the GNU General Public License
 along with kicad-footprint-generator. If not, see <http://www.gnu.org/licenses/>.
 
-Copyright (C) 2019 be Caleb Reister <calebreister@gmail.com>
+Copyright (C) 2019 by Caleb Reister <calebreister@gmail.com>
 """
 
 """

From dff42b10461ac48a13bc624e6888b99fc33a2a50 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Mon, 22 Jul 2019 23:24:06 -0700
Subject: [PATCH 25/62] Move license from docstring to comment block

---
 .../QStrip_QPairs_Vertical.py                 | 32 +++++++++----------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
index 0893fc8ea..545cf1e61 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
@@ -1,21 +1,21 @@
 #!/usr/bin/python
 
-"""
-This file is part of kicad-footprint-generator.
-
-kicad-footprint-generator is free software: you can redistribute it and/or
-modify it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.
-
-kicad-footprint-generator is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-more details. You should have received a copy of the GNU General Public License
-along with kicad-footprint-generator. If not, see <http://www.gnu.org/licenses/>.
-
-Copyright (C) 2019 by Caleb Reister <calebreister@gmail.com>
-"""
+# This file is part of kicad-footprint-generator.
+# 
+# kicad-footprint-generator is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+# 
+# kicad-footprint-generator is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+# more details. You should have received a copy of the GNU General Public
+# License along with kicad-footprint-generator. If not, see
+# <http://www.gnu.org/licenses/>.
+# 
+# Copyright (C) 2019 by Caleb Reister <calebreister@gmail.com>
+#
 
 """
 YAML footprint specification

From 2ca0199918bed0e980c7b958830d3070a07c50de Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Mon, 29 Jul 2019 13:54:40 -0700
Subject: [PATCH 26/62] Rename parameters in QStrip_QPairs_Vertical.*

---
 .../QStrip_QPairs_Vertical.py                 | 14 ++--
 .../QStrip_QPairs_Vertical.yaml               | 76 +++++++++----------
 2 files changed, 45 insertions(+), 45 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
index 545cf1e61..511738f3d 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
@@ -97,10 +97,10 @@ def generate_one_footprint(param, config, default_lib):
     # Copper layer(s)
     
     # Signal pad parameters
-    pitch = param['pins']['signal']['pitch']
-    pad_w = param['pins']['signal']['width']
-    pad_h = param['pins']['signal']['height']
-    pad_y = param['pins']['signal']['y']
+    pitch = param['pads']['signal']['pitch']
+    pad_w = param['pads']['signal']['width']
+    pad_h = param['pads']['signal']['height']
+    pad_y = param['pads']['signal']['y']
 
     # Pin 1 position
     pin1 = Vector2D(0,0)
@@ -148,10 +148,10 @@ def generate_one_footprint(param, config, default_lib):
             n += 1
     
     # Ground pad parameters
-    gnd_h = param['pins']['ground']['height']
+    gnd_h = param['pads']['ground']['height']
     # Combine spacing and width data into a zipped list: [(space,width), ...]
-    gnd_sw = [sw for sw in zip(param['pins']['ground']['space'],
-                               param['pins']['ground']['width'])]
+    gnd_sw = [sw for sw in zip(param['pads']['ground']['space'],
+                               param['pads']['ground']['width'])]
     gnd_sw.sort() # Sort from lowest (inner) to highest (outer) spacing
     
     # Place ground plane pads
diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
index 947a29574..eca43e7c3 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
@@ -24,7 +24,7 @@ Samtec_QTH-030-xx-x-D_P0.5mm_Vertical: &QTH-030-xx-x-D
       [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
   banks: {n: 1, diff: 0, slots: 60, space: 20.0, width: 16.5, height: 4.0}
-  pins: &QTH_pins
+  pads: &QTH_pads
     signal: {pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
     ground: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
 
@@ -54,7 +54,7 @@ Samtec_QTH-060-xx-x-D_P0.5mm_Vertical: &QTH-060-xx-x-D
   meta: *QTH_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
   banks: {n: 2, diff: 0, slots: 60, space: 20.0, width: 16.5, height: 4.0}
-  pins: *QTH_pins
+  pads: *QTH_pads
 
 Samtec_QTH-060-xx-x-D-A_P0.5mm_Vertical:
   <<: *QTH-060-xx-x-D
@@ -82,7 +82,7 @@ Samtec_QTH-090-xx-x-D_P0.5mm_Vertical: &QTH-090-xx-x-D
   meta: *QTH_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
   banks: {n: 3, diff: 0, slots: 60, space: 20.0, width: 16.5, height: 4.0}
-  pins: *QTH_pins
+  pads: *QTH_pads
 
 Samtec_QTH-090-xx-x-D-A_P0.5mm_Vertical:
   <<: *QTH-090-xx-x-D
@@ -102,7 +102,7 @@ Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical: &QTH-020-xx-x-D-DP
       [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
   banks: {n: 1, diff: 1, slots: 60, space: 20.0, width: 16.5, height: 4.0}
-  pins: *QTH_pins
+  pads: *QTH_pads
 
 Samtec_QTH-020-xx-x-D-DP-A_P0.5mm_Vertical:
   <<: *QTH-020-xx-x-D-DP
@@ -130,7 +130,7 @@ Samtec_QTH-040-xx-x-D-DP_P0.5mm_Vertical: &QTH-040-xx-x-D-DP
   meta: *QTH-DP_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
   banks: {n: 2, diff: 2, slots: 60, space: 20.0, width: 16.5, height: 4.0}
-  pins: *QTH_pins
+  pads: *QTH_pads
 
 Samtec_QTH-040-xx-x-D-DP-A_P0.5mm_Vertical:
   <<: *QTH-040-xx-x-D-DP
@@ -158,7 +158,7 @@ Samtec_QTH-060-xx-x-D-DP_P0.5mm_Vertical: &QTH-060-xx-x-D-DP
   meta: *QTH-DP_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
   banks: {n: 3, diff: 3, slots: 60, space: 20.0, width: 16.5, height: 4.0}
-  pins: *QTH_pins
+  pads: *QTH_pads
 
 Samtec_QTH-060-xx-x-D-DP-A_P0.5mm_Vertical:
   <<: *QTH-060-xx-x-D-DP
@@ -180,7 +180,7 @@ Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical:
       Bank 1 differential; {ds:s}
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
   banks: {n: 3, diff: 1, slots: 60, space: 20.0, width: 16.5, height: 4.0}
-  pins: *QTH_pins
+  pads: *QTH_pads
   holes:
     - {drill: 1.02, space: 58.48, y: -2.03}
 
@@ -195,7 +195,7 @@ Samtec_QSH-030-xx-x-D_P0.5mm_Vertical: &QSH-030-xx-x-D
       [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.31, height: 7.24}
   banks: {n: 1, diff: 0, slots: 60, space: 20.0, width: 16.0, height: 3.8}
-  pins: &QSH_pins
+  pads: &QSH_pads
     signal: {pitch: 0.5, y: 2.67, width: 0.279, height: 2.27}
     ground: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
 
@@ -216,7 +216,7 @@ Samtec_QSH-060-xx-x-D_P0.5mm_Vertical: &QSH-060-xx-x-D
   meta: *QSH_meta
   layout: {type: 'Socket', width: 41.31, height: 7.24}
   banks: {n: 2, diff: 0, slots: 60, space: 20.0, width: 16.0, height: 3.8}
-  pins: *QSH_pins
+  pads: *QSH_pads
 
 Samtec_QSH-060-xx-x-D-A_P0.5mm_Vertical:
   <<: *QSH-060-xx-x-D
@@ -235,7 +235,7 @@ Samtec_QSH-090-xx-x-D_P0.5mm_Vertical: &QSH-090-xx-x-D
   meta: *QSH_meta
   layout: {type: 'Socket', width: 61.38, height: 7.24}
   banks: {n: 3, diff: 0, slots: 60, space: 20.0, width: 16.0, height: 3.8}
-  pins: *QSH_pins
+  pads: *QSH_pads
 
 Samtec_QSH-090-xx-x-D-A_P0.5mm_Vertical:
   <<: *QSH-090-xx-x-D
@@ -259,7 +259,7 @@ Samtec_QSH-020-xx-x-D-DP_P0.5mm_Vertical: &QSH-020-xx-x-D-DP
       [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.31, height: 7.24}
   banks: {n: 1, diff: 1, slots: 60, space: 20.0, width: 16.0, height: 3.8}
-  pins: *QSH_pins
+  pads: *QSH_pads
 
 Samtec_QSH-020-xx-x-D-DP-A_P0.5mm_Vertical:
   <<: *QSH-020-xx-x-D-DP
@@ -278,7 +278,7 @@ Samtec_QSH-040-xx-x-D-DP_P0.5mm_Vertical: &QSH-040-xx-x-D-DP
   meta: *QSH-DP_meta
   layout: {type: 'Socket', width: 41.31, height: 7.24}
   banks: {n: 2, diff: 2, slots: 60, space: 20.0, width: 16.0, height: 3.8}
-  pins: *QSH_pins
+  pads: *QSH_pads
 
 Samtec_QSH-040-xx-x-D-DP-A_P0.5mm_Vertical:
   <<: *QSH-040-xx-x-D-DP
@@ -295,7 +295,7 @@ Samtec_QSH-060-xx-x-D-DP_P0.5mm_Vertical: &QSH-060-xx-x-D-DP
   meta: *QSH-DP_meta
   layout: {type: 'Socket', width: 61.38, height: 7.24}
   banks: {n: 3, diff: 3, slots: 60, space: 20.0, width: 16.0, height: 3.8}
-  pins: *QSH_pins
+  pads: *QSH_pads
 
 Samtec_QSH-060-xx-x-D-DP-A_P0.5mm_Vertical:
   <<: *QSH-060-xx-x-D-DP
@@ -321,7 +321,7 @@ Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
       Bank 1 differential; {ds:s}
   layout: {type: 'Socket', width: 61.38, height: 7.24}
   banks: {n: 3, diff: 1, slots: 60, space: 20.0, width: 16.0, height: 3.8}
-  pins: *QSH_pins
+  pads: *QSH_pads
   holes:
     - {drill: 1.02, space: 60.13, y: 2.03}
 
@@ -336,7 +336,7 @@ Samtec_QTS-025-xx-x-D_P0.635mm_Vertical: &QTS-025-xx-x-D
       [footprint](http://suddendocs.samtec.com/prints/qts-xxx-xx-x-d-xx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
   banks: {n: 1, diff: 0, slots: 50, space: 20.0, width: 16.5, height: 4.0}
-  pins: &QTS_pins
+  pads: &QTS_pads
     signal: {pitch: 0.635, y: 3.086, width: 0.406, height: 1.45}
     ground: {height: 0.635, width: [2.54, 4.7], space: [16.89, 6.35]}
 
@@ -351,7 +351,7 @@ Samtec_QTS-050-xx-x-D_P0.635mm_Vertical: &QTS-050-xx-x-D
   meta: *QTS_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
   banks: {n: 2, diff: 0, slots: 50, space: 20.0, width: 16.5, height: 4.0}
-  pins: *QTS_pins
+  pads: *QTS_pads
 
 Samtec_QTS-050-xx-x-D-A_P0.635mm_Vertical:
   <<: *QTS-050-xx-x-D
@@ -364,7 +364,7 @@ Samtec_QTS-075-xx-x-D_P0.635mm_Vertical: &QTS-075-xx-x-D
   meta: *QTS_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
   banks: {n: 3, diff: 0, slots: 50, space: 20.0, width: 16.5, height: 4.0}
-  pins: *QTS_pins
+  pads: *QTS_pads
 
 Samtec_QTS-075-xx-x-D-A_P0.635mm_Vertical:
   <<: *QTS-075-xx-x-D
@@ -382,7 +382,7 @@ Samtec_QTS-016-xx-x-D-DP_P0.635mm_Vertical: &QTS-016-xx-x-D-DP
       [footprint](http://suddendocs.samtec.com/prints/qts-xxx-xx-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
   banks: {n: 1, diff: 1, slots: 50, space: 20.0, width: 16.5, height: 4.0}
-  pins: *QTS_pins
+  pads: *QTS_pads
 
 Samtec_QTS-016-xx-x-D-DP-A_P0.635mm_Vertical:
   <<: *QTS-016-xx-x-D-DP
@@ -401,7 +401,7 @@ Samtec_QTS-032-xx-x-D-DP_P0.635mm_Vertical: &QTS-032-xx-x-D-DP
   meta: *QTS-DP_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
   banks: {n: 2, diff: 2, slots: 50, space: 20.0, width: 16.5, height: 4.0}
-  pins: *QTS_pins
+  pads: *QTS_pads
 
 Samtec_QTS-032-xx-x-D-DP-A_P0.635mm_Vertical:
   <<: *QTS-032-xx-x-D-DP
@@ -420,7 +420,7 @@ Samtec_QTS-048-xx-x-D-DP_P0.635mm_Vertical: &QTS-048-xx-x-D-DP
   meta: *QTS-DP_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
   banks: {n: 3, diff: 3, slots: 50, space: 20.0, width: 16.5, height: 4.0}
-  pins: *QTS_pins
+  pads: *QTS_pads
 
 Samtec_QTS-048-xx-x-D-DP-A_P0.635mm_Vertical:
   <<: *QTS-048-xx-x-D-DP
@@ -445,7 +445,7 @@ Samtec_QSS-025-xx-x-D_P0.635mm_Vertical: &QSS-025-xx-x-D
       [footprint](http://suddendocs.samtec.com/prints/qss-xxx-xx-x-d-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.27, height: 7.24}
   banks: {n: 1, diff: 0, slots: 50, space: 20.0, width: 16.0, height: 3.66}
-  pins: &QSS_pins
+  pads: &QSS_pads
     signal: {pitch: 0.635, y: 2.865, width: 0.406, height: 2.273}
     ground: {height: 0.432, width: [2.8, 4.7], space: [16.13, 6.35]}
 
@@ -460,7 +460,7 @@ Samtec_QSS-050-xx-x-D_P0.635mm_Vertical: &QSS-050-xx-x-D
   meta: *QSS_meta
   layout: {type: 'Socket', width: 41.28, height: 7.24}
   banks: {n: 2, diff: 0, slots: 50, space: 20.0, width: 16.0, height: 3.66}
-  pins: *QSS_pins
+  pads: *QSS_pads
 
 Samtec_QSS-050-xx-x-D-A_P0.635mm_Vertical:
   <<: *QSS-050-xx-x-D
@@ -473,7 +473,7 @@ Samtec_QSS-075-xx-x-D_P0.635mm_Vertical: &QSS-075-xx-x-D
   meta: *QSS_meta
   layout: {type: 'Socket', width: 61.28, height: 7.24}
   banks: {n: 3, diff: 0, slots: 50, space: 20.0, width: 16.0, height: 3.66}
-  pins: *QSS_pins
+  pads: *QSS_pads
 
 Samtec_QSS-075-xx-x-D-A_P0.635mm_Vertical:
   <<: *QSS-075-xx-x-D
@@ -491,7 +491,7 @@ Samtec_QSS-016-xx-x-D-DP_P0.635mm_Vertical: &QSS-016-xx-x-D-DP
       [footprint](http://suddendocs.samtec.com/prints/qss-xxx-xx-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.27, height: 7.24}
   banks: {n: 1, diff: 1, slots: 50, space: 20.0, width: 16.0, height: 3.66}
-  pins: *QSS_pins
+  pads: *QSS_pads
 
 Samtec_QSS-016-xx-x-D-DP-A_P0.635mm_Vertical:
   <<: *QSS-016-xx-x-D-DP
@@ -510,7 +510,7 @@ Samtec_QSS-032-xx-x-D-DP_P0.635mm_Vertical: &QSS-032-xx-x-D-DP
   meta: *QSS-DP_meta
   layout: {type: 'Socket', width: 41.28, height: 7.24}
   banks: {n: 2, diff: 2, slots: 50, space: 20.0, width: 16.0, height: 3.66}
-  pins: *QSS_pins
+  pads: *QSS_pads
 
 Samtec_QSS-032-xx-x-D-DP-A_P0.635mm_Vertical:
   <<: *QSS-032-xx-x-D-DP
@@ -529,7 +529,7 @@ Samtec_QSS-048-xx-x-D-DP_P0.635mm_Vertical: &QSS-048-xx-x-D-DP
   meta: *QSS-DP_meta
   layout: {type: 'Socket', width: 61.28, height: 7.24}
   banks: {n: 3, diff: 3, slots: 50, space: 20.0, width: 16.0, height: 3.66}
-  pins: *QSS_pins
+  pads: *QSS_pads
 
 Samtec_QSS-048-xx-x-D-DP-A_P0.635mm_Vertical:
   <<: *QSS-048-xx-x-D-DP
@@ -554,7 +554,7 @@ Samtec_QTE-020-xx-x-D_P0.8mm_Vertical: &QTE-020-xx-x-D
       [footprint](http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-xxx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
   banks: {n: 1, diff: 0, slots: 40, space: 20.0, width: 16.5, height: 4.0}
-  pins: &QTE_pins
+  pads: &QTE_pads
     signal: {pitch: 0.8, y: 2.98, width: 0.46, height: 1.94}
     ground: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
 
@@ -577,7 +577,7 @@ Samtec_QTE-040-xx-x-D_P0.8mm_Vertical: &QTE-040-xx-x-D
   meta: *QTE_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
   banks: {n: 2, diff: 0, slots: 40, space: 20.0, width: 16.5, height: 4.0}
-  pins: *QTE_pins
+  pads: *QTE_pads
 
 Samtec_QTE-040-xx-x-D-A_P0.8mm_Vertical:
   <<: *QTE-040-xx-x-D
@@ -598,7 +598,7 @@ Samtec_QTE-060-xx-x-D_P0.8mm_Vertical: &QTE-060-xx-x-D
   meta: *QTE_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
   banks: {n: 3, diff: 0, slots: 40, space: 20.0, width: 16.5, height: 4.0}
-  pins: *QTE_pins
+  pads: *QTE_pads
 
 Samtec_QTE-060-xx-x-D-A_P0.8mm_Vertical:
   <<: *QTE-060-xx-x-D
@@ -616,7 +616,7 @@ Samtec_QTE-014-xx-x-D-DP_P0.8mm_Vertical: &QTE-014-xx-x-D-DP
       [footprint](http://suddendocs.samtec.com/prints/qte-xxx-xx-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
   banks: {n: 1, diff: 1, slots: 40, space: 20.0, width: 16.5, height: 4.0}
-  pins: *QTE_pins
+  pads: *QTE_pads
 
 Samtec_QTE-014-xx-x-D-DP-A_P0.8mm_Vertical:
   <<: *QTE-014-xx-x-D-DP
@@ -637,7 +637,7 @@ Samtec_QTE-028-xx-x-D-DP_P0.8mm_Vertical: &QTE-028-xx-x-D-DP
   meta: *QTE-DP_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
   banks: {n: 2, diff: 2, slots: 40, space: 20.0, width: 16.5, height: 4.0}
-  pins: *QTE_pins
+  pads: *QTE_pads
 
 Samtec_QTE-028-xx-x-D-DP-A_P0.8mm_Vertical:
   <<: *QTE-028-xx-x-D-DP
@@ -658,7 +658,7 @@ Samtec_QTE-042-xx-x-D-DP_P0.8mm_Vertical: &QTE-042-xx-x-D-DP
   meta: *QTE-DP_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
   banks: {n: 3, diff: 3, slots: 40, space: 20.0, width: 16.5, height: 4.0}
-  pins: *QTE_pins
+  pads: *QTE_pads
 
 Samtec_QTE-042-xx-x-D-DP-A_P0.8mm_Vertical:
   <<: *QTE-042-xx-x-D-DP
@@ -677,7 +677,7 @@ Samtec_QSE-020-xx-x-D_P0.8mm_Vertical: &QSE-020-xx-x-D
       [footprint](http://suddendocs.samtec.com/prints/qse-xxx-xx-x-d-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.27, height: 7.24}
   banks: {n: 1, diff: 0, slots: 40, space: 20.0, width: 16.0, height: 3.8}
-  pins: &QSE_pins
+  pads: &QSE_pads
     signal: {pitch: 0.8, y: 2.87, width: 0.41, height: 2.27}
     ground: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
 
@@ -700,7 +700,7 @@ Samtec_QSE-040-xx-x-D_P0.8mm_Vertical: &QSE-040-xx-x-D
   meta: *QSE_meta
   layout: {type: 'Socket', width: 41.28, height: 7.24}
   banks: {n: 2, diff: 0, slots: 40, space: 20.0, width: 16.0, height: 3.8}
-  pins: *QSE_pins
+  pads: *QSE_pads
 
 Samtec_QSE-040-xx-x-D-A_P0.8mm_Vertical:
   <<: *QSE-040-xx-x-D
@@ -713,7 +713,7 @@ Samtec_QSE-060-xx-x-D_P0.8mm_Vertical: &QSE-060-xx-x-D
   meta: *QSE_meta
   layout: {type: 'Socket', width: 61.28, height: 7.24}
   banks: {n: 3, diff: 0, slots: 40, space: 20.0, width: 16.0, height: 3.8}
-  pins: *QSE_pins
+  pads: *QSE_pads
 
 Samtec_QSE-060-xx-x-D-A_P0.8mm_Vertical:
   <<: *QSE-060-xx-x-D
@@ -731,7 +731,7 @@ Samtec_QSE-014-xx-x-D-DP_P0.8mm_Vertical: &QSE-014-xx-x-D-DP
       [footprint](http://suddendocs.samtec.com/prints/qse-xxx-xx-x-d-dp-xxx-footprint.pdf)
   layout: {type: 'Socket', width: 21.27, height: 7.24}
   banks: {n: 1, diff: 1, slots: 40, space: 20.0, width: 16.0, height: 3.8}
-  pins: *QSE_pins
+  pads: *QSE_pads
 
 Samtec_QSE-014-xx-x-D-DP-A_P0.8mm_Vertical:
   <<: *QSE-014-xx-x-D-DP
@@ -744,7 +744,7 @@ Samtec_QSE-028-xx-x-D-DP_P0.8mm_Vertical: &QSE-028-xx-x-D-DP
   meta: *QSE-DP_meta
   layout: {type: 'Socket', width: 41.28, height: 7.24}
   banks: {n: 2, diff: 2, slots: 40, space: 20.0, width: 16.0, height: 3.8}
-  pins: *QSE_pins
+  pads: *QSE_pads
 
 Samtec_QSE-028-xx-x-D-DP-A_P0.8mm_Vertical:
   <<: *QSE-028-xx-x-D-DP
@@ -757,7 +757,7 @@ Samtec_QSE-042-xx-x-D-DP_P0.8mm_Vertical: &QSE-042-xx-x-D-DP
   meta: *QSE-DP_meta
   layout: {type: 'Socket', width: 61.28, height: 7.24}
   banks: {n: 3, diff: 3, slots: 40, space: 20.0, width: 16.0, height: 3.8}
-  pins: *QSE_pins
+  pads: *QSE_pads
 
 Samtec_QSE-042-xx-x-D-DP-A_P0.8mm_Vertical:
   <<: *QSE-042-xx-x-D-DP

From a3bc5e6d810509079fa0c29ff2b1e2e6d19a2ef8 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sun, 5 Jul 2020 11:08:07 -0700
Subject: [PATCH 27/62] Create initial version of RazorBeam_Vertical.py and
 YAML file

---
 .../Connector_Samtec/RazorBeam_Vertical.py    | 289 ++++++++++++++++++
 .../Connector_Samtec/RazorBeam_Vertical.yaml  | 191 ++++++++++++
 2 files changed, 480 insertions(+)
 create mode 100755 scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
 create mode 100644 scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml

diff --git a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
new file mode 100755
index 000000000..bdb1ebe97
--- /dev/null
+++ b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
@@ -0,0 +1,289 @@
+#!/usr/bin/python
+
+# This file is part of kicad-footprint-generator.
+# 
+# kicad-footprint-generator is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+# 
+# kicad-footprint-generator is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+# more details. You should have received a copy of the GNU General Public
+# License along with kicad-footprint-generator. If not, see
+# <http://www.gnu.org/licenses/>.
+# 
+# Copyright (C) 2019 by Caleb Reister <calebreister@gmail.com>
+#
+
+import sys
+import os
+import argparse
+from copy import deepcopy
+import math
+import yaml
+
+# Load parent path of KicadModTree
+sys.path.append(os.path.join(sys.path[0], "..", "..", ".."))
+sys.path.append(os.path.join(sys.path[0], "..", "..", "tools"))
+
+from KicadModTree import *
+from footprint_text_fields import addTextFields
+from helpers import *
+
+def generate_one_footprint(param, config, default_lib):
+    fp = Footprint(param['name'])
+
+    # Pad parameters
+    pitch = param['pads']['pitch']
+    pad_w = param['pads']['width']
+    pad_h = param['pads']['height']
+    pad_y = param['pads']['y']
+    pins = param['pins'] # Pin count
+
+    # Part number
+    partnum = param['meta'].get('pn', param['name'].split('_')[1])
+    
+    # Description
+    desc = param['meta']['description']
+    desc = desc.format(pn = partnum, pitch = pitch,
+                       ds = param['meta']['datasheet'])
+    fp.setDescription(desc)
+
+    # Tags
+    tags = param['meta']['tags']
+    if 'add-tags' in param:
+        tags += ' ' + param['add-tags']
+    fp.setTags(tags)
+
+    ############################################################################
+    # Place pads
+    # Pin 1 position
+    pin1 = Vector2D(0,0)
+    pin1.x = -(pins / 4)*pitch + pitch/2
+    pin1.y = -pad_y
+    
+    pin = [] # Pin position list
+    for p in range(pins):
+        # Compute next pad location
+        pos = {'x': pin1.x + (p // 2)*pitch,
+               'y': pin1.y - (p  % 2)*(2*pin1.y)}
+        
+        # Create pad
+        pin.append(pos)
+        pad = Pad(number = str(p+1),
+                  at = pos,
+                  size = (pad_w, pad_h),
+                  type = Pad.TYPE_SMT,
+                  layers = Pad.LAYERS_SMT,
+                  shape = Pad.SHAPE_RECT)
+        fp.append(pad)
+
+    ############################################################################
+    # Holes
+    hole_list = param['holes'] + param.get('add-holes', [])
+    for p in hole_list:
+        drill = p['drill']
+        shape = Pad.SHAPE_CIRCLE if type(drill) is float else Pad.SHAPE_OVAL
+        h = [Pad(number = "SH" if 'pad' in p else "",
+                 at     = (m*p['space']/2, p['y']),
+                 drill  = drill,
+                 size   = p['pad']       if 'pad' in p else drill,
+                 type   = Pad.TYPE_THT   if 'pad' in p else Pad.TYPE_NPTH,
+                 layers = Pad.LAYERS_THT if 'pad' in p else Pad.LAYERS_NPTH,
+                 shape  = shape) for m in (-1,1)]
+        fp.extend(h)
+
+    ############################################################################
+    # Fabrication layer: F.Fab
+    fab_line = config['fab_line_width']
+    fab_mark = config['fab_pin1_marker_length']
+    fab_w = param['layout']['width']
+    if 'add-width' in param:
+        fab_w += param['add-width']
+    fab_h = param['layout']['height']
+    fab_y = fab_h / 2
+    lEdge = -fab_w / 2
+    rEdge = lEdge + fab_w
+    chamfer = fab_h / 10 # cosmetic only
+
+    # Draw outline
+    outline = [(lEdge + chamfer, -fab_y),
+               (lEdge, -fab_y + chamfer),
+               (lEdge,  fab_y - chamfer),
+               (lEdge + chamfer, fab_y),
+               (rEdge - chamfer, fab_y),
+               (rEdge,  fab_y - chamfer),
+               (rEdge, -fab_y + chamfer),
+               (rEdge - chamfer, -fab_y),
+               (lEdge + chamfer, -fab_y)]
+    fp.append(PolygoneLine(nodes = outline,
+                           layer = "F.Fab",
+                           width = fab_line))
+
+    # Pin 1 marker
+    fp.append(markerArrow(x = pin1.x,
+                          y = (fab_mark-fab_h) / 2,
+                          width = fab_mark,
+                          angle = 180,
+                          layer = "F.Fab",
+                          close = False,
+                          line_width = fab_line))
+
+    ############################################################################
+    # Courtyard: F.CrtYd
+    court_line = config['courtyard_line_width']
+    court_grid = config['courtyard_grid']
+    court_offset = config['courtyard_offset']['connector']
+
+    court_x = roundToBase(fab_w/2 + court_offset, court_grid)
+    court_y = roundToBase(max(fab_y, pad_y + pad_h/2) + court_offset, court_grid)
+
+    fp.append(RectLine(start  = (-court_x, -court_y),
+                       end    = ( court_x,  court_y),
+                       layer  = "F.CrtYd",
+                       width  = court_line))
+
+    ############################################################################
+    # Silkscreen: F.SilkS
+    silk_offset = config['silk_fab_offset']
+    silk_pad = {'x': config['silk_pad_clearance'] + pad_w/2,
+                'y': config['silk_pad_clearance'] + pad_h/2}
+    silk_line = config['silk_line_width']
+    silk_y = fab_y + silk_offset
+    silk_lEdge = lEdge - silk_offset
+    silk_rEdge = rEdge + silk_offset
+    silk_chamfer = chamfer + silk_offset/2
+    silk_pin1 = pin1.x - silk_pad['x']
+
+    if 'shield' in tags:
+        silk_lEnd = [[{'x': silk_pin1, 'y': -silk_y},
+                      {'x': silk_lEdge + silk_chamfer, 'y': -silk_y},
+                      {'x': silk_lEdge, 'y': -silk_y + silk_chamfer},
+                      {'x': silk_lEdge, 'y':  0}],
+                     [{'x': silk_lEdge + silk_chamfer/2, 'y': silk_y - silk_chamfer/2},
+                      {'x': silk_lEdge + silk_chamfer, 'y': silk_y},
+                      {'x': silk_pin1, 'y': silk_y}]]
+    else:
+        silk_lEnd = [[{'x': silk_pin1, 'y': -silk_y},
+                      {'x': silk_lEdge + silk_chamfer, 'y': -silk_y},
+                      {'x': silk_lEdge, 'y': -silk_y + silk_chamfer},
+                      {'x': silk_lEdge, 'y':  silk_y - silk_chamfer},
+                      {'x': silk_lEdge + silk_chamfer, 'y': silk_y},
+                      {'x': silk_pin1, 'y': silk_y}]]
+
+    # Generate right outline
+    silk_rEnd = deepcopy(silk_lEnd)
+    # Mirror about x axis
+    for a in range(len(silk_lEnd)):
+        for b in range(len(silk_lEnd[a])):
+            silk_rEnd[a][b]['x'] = -silk_rEnd[a][b]['x']
+
+    # Draw left and right outlines
+    for i in range(len(silk_lEnd)):
+        fp.append(PolygoneLine(nodes = silk_lEnd[i],
+                               layer = "F.SilkS",
+                               width = silk_line))
+        fp.append(PolygoneLine(nodes = silk_rEnd[i],
+                               layer = "F.SilkS",
+                               width = silk_line))
+
+    # Pin 1 indicator
+    fp.append(markerArrow(x = pin1.x,
+                          y = pin1.y - silk_pad['y'],
+                          width = fab_mark / 2,
+                          angle = 180,
+                          line_width = silk_line,
+                          layer = "F.SilkS"))
+    
+    ############################################################################
+    # Set Metadata
+    
+    # Draw reference and value
+    text_y = court_y + 1.0
+    fp.append(Text(type = 'reference', text = 'REF**',
+                   at = (0, -text_y),
+                   layer = "F.SilkS"))
+    fp.append(Text(type = 'user', text = '%R',
+                   at = (0, -text_y),
+                   layer = "F.Fab"))
+    fp.append(Text(type = 'value', text=param['name'],
+                   at = (0, text_y),
+                   layer="F.Fab"))
+    
+    # Set surface-mount attribute
+    fp.setAttribute('smd')
+    
+    # 3D model path
+    library = param.get('library', default_lib)
+    model_path = os.path.join('${KISYS3DMOD}',
+                              library+'.3dshapes',
+                              param['name'] + '.wrl')
+    fp.append(Model(filename = model_path))
+
+    ############################################################################
+    # Write kicad_mod file
+    
+    os.makedirs(library+'.pretty', exist_ok=True)
+    filename = os.path.join(library+'.pretty', param['name']+'.kicad_mod')
+    KicadFileHandler(fp).writeFile(filename)
+
+################################################################################
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser()
+    parser.add_argument('--global-config', type=str, nargs='?',
+                        default='../../tools/global_config_files/config_KLCv3.0.yaml',
+                        help='Global KLC configuration YAML file')
+    parser.add_argument('--series-config', type=str, nargs='?',
+                        default='../conn_config_KLCv3.yaml',
+                        help='Series KLC configuration YAML file')
+    parser.add_argument('--library', type=str, nargs='?',
+                        default='Connector_Samtec_QStrip_QPairs',
+                        help='Default KiCad library name (without extension)')
+    parser.add_argument('files', metavar='file', type=str, nargs='*',
+                        help='YAML file(s) containing footprint parameters')
+    args = parser.parse_args()
+
+    with open(args.global_config, 'r') as config_stream:
+        try:
+            config = yaml.safe_load(config_stream)
+        except yaml.YAMLError as exc:
+            print(exc)
+
+    with open(args.series_config, 'r') as config_stream:
+        try:
+            config.update(yaml.safe_load(config_stream))
+        except yaml.YAMLError as exc:
+            print(exc)
+
+    if len(args.files) == 0:
+        parser.print_help()
+        sys.exit(1)
+
+    print("Default Library:", args.library)
+    
+    for path in args.files:
+        print("Reading", path)
+        with open(path, 'r') as stream:
+            try:
+                footprints = yaml.safe_load(stream)
+                
+                if footprints is None:
+                    print(path, "empty, skipping...")
+                    continue
+
+                for fp_name in footprints:
+                    fp_params = footprints.get(fp_name)                    
+                    if 'name' in fp_params:
+                        print("WARNING: setting 'name' to", fp_name)
+                        
+                    fp_params['name'] = fp_name
+
+                    print("  - ",
+                          fp_params.get('library', args.library), ".pretty/",
+                          fp_name, ".kicad_mod", sep="")
+                    
+                    generate_one_footprint(fp_params, config, args.library)
+            except yaml.YAMLError as exc:
+                print(exc)
diff --git a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml
new file mode 100644
index 000000000..de1e138ad
--- /dev/null
+++ b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml
@@ -0,0 +1,191 @@
+################################################################################
+# LSHM family
+Samtec_LSHM-105-xx.x-x-DV-A-N_Vertical: &LSHM-105
+  meta: &LSHM_meta
+    description: 'Samtec {pn:s} {pitch:1.2f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip; {ds:s}'
+    tags: 'connector Samtec RazorBeam LSHM self-mating terminal socket vertical'
+    datasheet: >-
+     [drawing](http://suddendocs.samtec.com/prints/lshm-1xx-xx.x-xxx-dv-a-x-x-xx-mkt.pdf),
+     [footprint](http://suddendocs.samtec.com/prints/lshm-1xx-xx.x-x-dv-a-x-x-tr-footprint.pdf)
+  pads: &LSHM_pads {pitch: 0.5, y: 1.85, width: 0.3, height: 1.5}
+  layout: {width: 7.2, height: 4.98}
+  pins: 10
+  holes:
+    - {drill: 1.45, space: 4.5, y: -0.85}
+
+Samtec_LSHM-105-xx.x-x-DV-A-S_Vertical:
+  <<: *LSHM-105
+  add-tags: 'shield'
+  add-width: 0.45
+  add-holes:
+    - {drill: 1.0, pad: 2.0, space: 7.45, y: 1.15}
+
+Samtec_LSHM-110-xx.x-x-DV-A-N_Vertical: &LSHM-110
+  meta: *LSHM_meta
+  pads: *LSHM_pads
+  layout: {width: 9.7, height: 4.98}
+  pins: 20
+  holes:
+    - {drill: 1.45, space: 7.0, y: -0.85}
+
+Samtec_LSHM-110-xx.x-x-DV-A-S_Vertical:
+  <<: *LSHM-110
+  add-tags: 'shield'
+  add-width: 0.45
+  add-holes:
+    - {drill: 1.0, pad: 2.0, space: 9.95, y: 1.15}
+
+Samtec_LSHM-120-xx.x-x-DV-A-N_Vertical: &LSHM-120
+  meta: *LSHM_meta
+  pads: *LSHM_pads
+  layout: {width: 14.7, height: 4.98}
+  pins: 40
+  holes:
+    - {drill: 1.45, space: 12.0, y: -0.85}
+
+Samtec_LSHM-120-xx.x-x-DV-A-S_Vertical:
+  <<: *LSHM-120
+  add-tags: 'shield'
+  add-width: 0.45
+  add-holes:
+    - {drill: 1.0, pad: 2.0, space: 14.95, y: 1.15}
+
+Samtec_LSHM-130-xx.x-x-DV-A-N_Vertical: &LSHM-130
+  meta: *LSHM_meta
+  pads: *LSHM_pads
+  layout: {width: 19.7, height: 4.98}
+  pins: 60
+  holes:
+    - {drill: 1.45, space: 17.0, y: -0.85}
+
+Samtec_LSHM-130-xx.x-x-DV-A-S_Vertical:
+  <<: *LSHM-130
+  add-tags: 'shield'
+  add-width: 0.45
+  add-holes:
+    - {drill: 1.0, pad: 2.0, space: 19.95, y: 1.15}
+
+Samtec_LSHM-140-xx.x-x-DV-A-N_Vertical: &LSHM-140
+  meta: *LSHM_meta
+  pads: *LSHM_pads
+  layout: {width: 24.7, height: 4.98}
+  pins: 80
+  holes:
+    - {drill: 1.45, space: 22.0, y: -0.85}
+
+Samtec_LSHM-140-xx.x-x-DV-A-S_Vertical:
+  <<: *LSHM-140
+  add-tags: 'shield'
+  add-width: 0.45
+  add-holes:
+    - {drill: 1.0, pad: 2.0, space: 24.95, y: 1.15}
+
+Samtec_LSHM-150-xx.x-x-DV-A-N_Vertical: &LSHM-150
+  meta: *LSHM_meta
+  pads: *LSHM_pads
+  layout: {width: 29.7, height: 4.98}
+  pins: 100
+  holes:
+    - {drill: 1.45, space: 27.0, y: -0.85}
+
+Samtec_LSHM-150-xx.x-x-DV-A-S_Vertical:
+  <<: *LSHM-150
+  add-tags: 'shield'
+  add-width: 0.45
+  add-holes:
+    - {drill: 1.0, pad: 2.0, space: 29.95, y: 1.15}
+
+################################################################################
+# LSS family
+#Samtec_LSS-105-xx-x-DV-A_Vertical:
+#  meta: &LSS_meta
+#    description: 'Samtec {pn:s} {pitch:1.3f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip; {ds:s}'
+#    tags: 'connector Samtec RazorBeam LSS self-mating terminal socket vertical'
+#    datasheet: >-
+#     [drawing](http://suddendocs.samtec.com/prints/lss-1xx-xx-xx-dv-xx-xx-mkt.pdf),
+#     [footprint](http://suddendocs.samtec.com/prints/lss-1xx-xx-xx-dv-xx-xx-footprint.pdf)
+#  pads: &LSS_pads {pitch: 0.635, y: 1.8, width: 0.4, height: 1.6}
+#  layout: {width: , height: 4.0}
+#  pins: 10
+#  holes:
+#    - {drill: 0.89, space: 4.675, y: -1.1}
+#
+#Samtec_LSS-110-xx-x-DV-A_Vertical:
+#  meta: *LSS_meta
+#  pads: *LSS_pads
+#  layout: {width: , height: 4.0}
+#  pins: 20
+#  holes:
+#    - {drill: 0.89, space: , y: 1.1}
+#
+#Samtec_LSS-120-xx-x-DV-A_Vertical:
+#  meta: *LSS_meta
+#  pads: *LSS_pads
+#  layout: {width: }
+#  pins: 40
+#  holes:
+#    - {drill: 0.89, space: , y: 1.1}
+#
+#Samtec_LSS-130-xx-x-DV-A_Vertical:
+#  meta: *LSS_meta
+#  pads: *LSS_pads
+#  layout: {width: }
+#  pins: 60
+#  holes:
+#    - {drill: 0.89, space: , y: 1.1}
+#
+#Samtec_LSS-140-xx-x-DV-A_Vertical:
+#  meta: *LSS_meta
+#  pads: *LSS_pads
+#  layout: {width: }
+#  pins: 80
+#  holes:
+#    - {drill: 0.89, space: , y: 1.1}
+#
+#Samtec_LSS-150-xx-x-DV-A_Vertical:
+#  meta: *LSS_meta
+#  pads: *LSS_pads
+#  layout: {width: }
+#  pins: 100
+#  holes:
+#    - {drill: 0.89, space: , y: 1.1}
+
+################################################################################
+# LSEM family
+#Samtec_LSEM-120-xx.x-x-DV-A-N_Vertical:
+#  meta: &LSEM_meta
+#    description: 'Samtec {pn:s} {pitch:1.2f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip; {ds:s}'
+#    tags: 'connector Samtec RazorBeam LSEM self-mating terminal socket vertical'
+#    datasheet: >-
+#     [drawing](http://suddendocs.samtec.com/prints/lsem-1xx-xx.x-x-dv-a-x-xx-tr-mkt.pdf),
+#     [footprint](http://suddendocs.samtec.com/prints/lsem-1xx-xx.x-x-dv-a-x-xx-tr%20footprint.pdf)
+#  pads: &LSEM_pads {pitch: 0.8, y: , width: 0.38, height: 1.65}
+#  layout: {width: 20.4}
+#  pins: 40
+#  holes:
+#    - {drill: 1.5, space: 17.7, y: }
+#
+#Samtec_LSS-130-xx-x-DV-A_Vertical:
+#  meta: *LSEM_meta
+#  pads: *LSEM_pads
+#  layout: {width: 28.4}
+#  pins: 60
+#  holes:
+#    - {drill: 1.5, space: 25.7, y: }
+#
+#Samtec_LSS-140-xx-x-DV-A_Vertical:
+#  meta: *LSEM_meta
+#  pads: *LSEM_pads
+#  layout: {width: 36.4}
+#  pins: 80
+#  holes:
+#    - {drill: 1.5, space: 33.7, y: }
+#
+#Samtec_LSS-150-xx-x-DV-A_Vertical:
+#  meta: *LSEM_meta
+#  pads: *LSEM_pads
+#  layout: {width: 44.4}
+#  pins: 100
+#  holes:
+#    - {drill: 1.5, space: 41.7, y: }
+#

From 590fd6095583f43cc73fd4df9fbcfba32d92e714 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sun, 5 Jul 2020 13:00:01 -0700
Subject: [PATCH 28/62] Add LSEM series to RazorBeam_Vertical

---
 .../Connector_Samtec/RazorBeam_Vertical.py    | 12 +--
 .../Connector_Samtec/RazorBeam_Vertical.yaml  | 80 ++++++++++---------
 2 files changed, 50 insertions(+), 42 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
index bdb1ebe97..5872bd54a 100755
--- a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
@@ -100,9 +100,11 @@ def generate_one_footprint(param, config, default_lib):
     fab_line = config['fab_line_width']
     fab_mark = config['fab_pin1_marker_length']
     fab_w = param['layout']['width']
+    fab_h = param['layout']['height']
     if 'add-width' in param:
         fab_w += param['add-width']
-    fab_h = param['layout']['height']
+    if 'add-height' in param:
+        fab_h += param['add-height']
     fab_y = fab_h / 2
     lEdge = -fab_w / 2
     rEdge = lEdge + fab_w
@@ -148,10 +150,10 @@ def generate_one_footprint(param, config, default_lib):
     ############################################################################
     # Silkscreen: F.SilkS
     silk_offset = config['silk_fab_offset']
+    silk_y = fab_y + silk_offset
     silk_pad = {'x': config['silk_pad_clearance'] + pad_w/2,
-                'y': config['silk_pad_clearance'] + pad_h/2}
+                'y': config['silk_pad_clearance'] + silk_y}
     silk_line = config['silk_line_width']
-    silk_y = fab_y + silk_offset
     silk_lEdge = lEdge - silk_offset
     silk_rEdge = rEdge + silk_offset
     silk_chamfer = chamfer + silk_offset/2
@@ -162,7 +164,7 @@ def generate_one_footprint(param, config, default_lib):
                       {'x': silk_lEdge + silk_chamfer, 'y': -silk_y},
                       {'x': silk_lEdge, 'y': -silk_y + silk_chamfer},
                       {'x': silk_lEdge, 'y':  0}],
-                     [{'x': silk_lEdge + silk_chamfer/2, 'y': silk_y - silk_chamfer/2},
+                     [{'x': silk_lEdge, 'y': silk_y - silk_chamfer},
                       {'x': silk_lEdge + silk_chamfer, 'y': silk_y},
                       {'x': silk_pin1, 'y': silk_y}]]
     else:
@@ -191,7 +193,7 @@ def generate_one_footprint(param, config, default_lib):
 
     # Pin 1 indicator
     fp.append(markerArrow(x = pin1.x,
-                          y = pin1.y - silk_pad['y'],
+                          y = -silk_pad['y'],
                           width = fab_mark / 2,
                           angle = 180,
                           line_width = silk_line,
diff --git a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml
index de1e138ad..1b64a88c6 100644
--- a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml
@@ -17,6 +17,7 @@ Samtec_LSHM-105-xx.x-x-DV-A-S_Vertical:
   <<: *LSHM-105
   add-tags: 'shield'
   add-width: 0.45
+  add-height: 0.45
   add-holes:
     - {drill: 1.0, pad: 2.0, space: 7.45, y: 1.15}
 
@@ -32,6 +33,7 @@ Samtec_LSHM-110-xx.x-x-DV-A-S_Vertical:
   <<: *LSHM-110
   add-tags: 'shield'
   add-width: 0.45
+  add-height: 0.45
   add-holes:
     - {drill: 1.0, pad: 2.0, space: 9.95, y: 1.15}
 
@@ -47,6 +49,7 @@ Samtec_LSHM-120-xx.x-x-DV-A-S_Vertical:
   <<: *LSHM-120
   add-tags: 'shield'
   add-width: 0.45
+  add-height: 0.45
   add-holes:
     - {drill: 1.0, pad: 2.0, space: 14.95, y: 1.15}
 
@@ -62,6 +65,7 @@ Samtec_LSHM-130-xx.x-x-DV-A-S_Vertical:
   <<: *LSHM-130
   add-tags: 'shield'
   add-width: 0.45
+  add-height: 0.45
   add-holes:
     - {drill: 1.0, pad: 2.0, space: 19.95, y: 1.15}
 
@@ -77,6 +81,7 @@ Samtec_LSHM-140-xx.x-x-DV-A-S_Vertical:
   <<: *LSHM-140
   add-tags: 'shield'
   add-width: 0.45
+  add-height: 0.45
   add-holes:
     - {drill: 1.0, pad: 2.0, space: 24.95, y: 1.15}
 
@@ -92,6 +97,7 @@ Samtec_LSHM-150-xx.x-x-DV-A-S_Vertical:
   <<: *LSHM-150
   add-tags: 'shield'
   add-width: 0.45
+  add-height: 0.45
   add-holes:
     - {drill: 1.0, pad: 2.0, space: 29.95, y: 1.15}
 
@@ -152,40 +158,40 @@ Samtec_LSHM-150-xx.x-x-DV-A-S_Vertical:
 
 ################################################################################
 # LSEM family
-#Samtec_LSEM-120-xx.x-x-DV-A-N_Vertical:
-#  meta: &LSEM_meta
-#    description: 'Samtec {pn:s} {pitch:1.2f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip; {ds:s}'
-#    tags: 'connector Samtec RazorBeam LSEM self-mating terminal socket vertical'
-#    datasheet: >-
-#     [drawing](http://suddendocs.samtec.com/prints/lsem-1xx-xx.x-x-dv-a-x-xx-tr-mkt.pdf),
-#     [footprint](http://suddendocs.samtec.com/prints/lsem-1xx-xx.x-x-dv-a-x-xx-tr%20footprint.pdf)
-#  pads: &LSEM_pads {pitch: 0.8, y: , width: 0.38, height: 1.65}
-#  layout: {width: 20.4}
-#  pins: 40
-#  holes:
-#    - {drill: 1.5, space: 17.7, y: }
-#
-#Samtec_LSS-130-xx-x-DV-A_Vertical:
-#  meta: *LSEM_meta
-#  pads: *LSEM_pads
-#  layout: {width: 28.4}
-#  pins: 60
-#  holes:
-#    - {drill: 1.5, space: 25.7, y: }
-#
-#Samtec_LSS-140-xx-x-DV-A_Vertical:
-#  meta: *LSEM_meta
-#  pads: *LSEM_pads
-#  layout: {width: 36.4}
-#  pins: 80
-#  holes:
-#    - {drill: 1.5, space: 33.7, y: }
-#
-#Samtec_LSS-150-xx-x-DV-A_Vertical:
-#  meta: *LSEM_meta
-#  pads: *LSEM_pads
-#  layout: {width: 44.4}
-#  pins: 100
-#  holes:
-#    - {drill: 1.5, space: 41.7, y: }
-#
+Samtec_LSEM-120-xx.x-x-DV-A-N_Vertical:
+  meta: &LSEM_meta
+    description: 'Samtec {pn:s} {pitch:1.2f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip; {ds:s}'
+    tags: 'connector Samtec RazorBeam LSEM self-mating terminal socket vertical'
+    datasheet: >-
+     [drawing](http://suddendocs.samtec.com/prints/lsem-1xx-xx.x-x-dv-a-x-xx-tr-mkt.pdf),
+     [footprint](http://suddendocs.samtec.com/prints/lsem-1xx-xx.x-x-dv-a-x-xx-tr%20footprint.pdf)
+  pads: &LSEM_pads {pitch: 0.8, y: 1.85, width: 0.38, height: 1.65}
+  layout: {width: 20.4, height: 4.98}
+  pins: 40
+  holes:
+    - {drill: 1.5, space: 17.7, y: -0.85}
+
+Samtec_LSS-130-xx-x-DV-A_Vertical:
+  meta: *LSEM_meta
+  pads: *LSEM_pads
+  layout: {width: 28.4, height: 4.98}
+  pins: 60
+  holes:
+    - {drill: 1.5, space: 25.7, y: -0.85}
+
+Samtec_LSS-140-xx-x-DV-A_Vertical:
+  meta: *LSEM_meta
+  pads: *LSEM_pads
+  layout: {width: 36.4, height: 4.98}
+  pins: 80
+  holes:
+    - {drill: 1.5, space: 33.7, y: -0.85}
+
+Samtec_LSS-150-xx-x-DV-A_Vertical:
+  meta: *LSEM_meta
+  pads: *LSEM_pads
+  layout: {width: 44.4, height: 4.98}
+  pins: 100
+  holes:
+    - {drill: 1.5, space: 41.7, y: -0.85}
+

From fb0beb81b7d2fdfe7c1fef236c8c023b28714a06 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sun, 5 Jul 2020 13:34:29 -0700
Subject: [PATCH 29/62] Adjust RazorBeam pin 1 indicator

---
 scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py   | 4 ++--
 scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml | 6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
index 5872bd54a..1024e1d24 100755
--- a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
@@ -152,7 +152,7 @@ def generate_one_footprint(param, config, default_lib):
     silk_offset = config['silk_fab_offset']
     silk_y = fab_y + silk_offset
     silk_pad = {'x': config['silk_pad_clearance'] + pad_w/2,
-                'y': config['silk_pad_clearance'] + silk_y}
+                'y': config['silk_pad_clearance'] + pad_y/2}
     silk_line = config['silk_line_width']
     silk_lEdge = lEdge - silk_offset
     silk_rEdge = rEdge + silk_offset
@@ -193,7 +193,7 @@ def generate_one_footprint(param, config, default_lib):
 
     # Pin 1 indicator
     fp.append(markerArrow(x = pin1.x,
-                          y = -silk_pad['y'],
+                          y = pin1.y - silk_pad['y'],
                           width = fab_mark / 2,
                           angle = 180,
                           line_width = silk_line,
diff --git a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml
index 1b64a88c6..3f618593a 100644
--- a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml
@@ -171,7 +171,7 @@ Samtec_LSEM-120-xx.x-x-DV-A-N_Vertical:
   holes:
     - {drill: 1.5, space: 17.7, y: -0.85}
 
-Samtec_LSS-130-xx-x-DV-A_Vertical:
+Samtec_LSEM-130-xx-x-DV-A-N_Vertical:
   meta: *LSEM_meta
   pads: *LSEM_pads
   layout: {width: 28.4, height: 4.98}
@@ -179,7 +179,7 @@ Samtec_LSS-130-xx-x-DV-A_Vertical:
   holes:
     - {drill: 1.5, space: 25.7, y: -0.85}
 
-Samtec_LSS-140-xx-x-DV-A_Vertical:
+Samtec_LSEM-140-xx-x-DV-A-N_Vertical:
   meta: *LSEM_meta
   pads: *LSEM_pads
   layout: {width: 36.4, height: 4.98}
@@ -187,7 +187,7 @@ Samtec_LSS-140-xx-x-DV-A_Vertical:
   holes:
     - {drill: 1.5, space: 33.7, y: -0.85}
 
-Samtec_LSS-150-xx-x-DV-A_Vertical:
+Samtec_LSEM-150-xx-x-DV-A-N_Vertical:
   meta: *LSEM_meta
   pads: *LSEM_pads
   layout: {width: 44.4, height: 4.98}

From 4ac386a4c93b75d882b3bb2f6c54e10562de9688 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sun, 5 Jul 2020 13:44:34 -0700
Subject: [PATCH 30/62] Fix LSEM part names

---
 scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml
index 3f618593a..a0dbe11d9 100644
--- a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml
@@ -171,7 +171,7 @@ Samtec_LSEM-120-xx.x-x-DV-A-N_Vertical:
   holes:
     - {drill: 1.5, space: 17.7, y: -0.85}
 
-Samtec_LSEM-130-xx-x-DV-A-N_Vertical:
+Samtec_LSEM-130-xx.x-x-DV-A-N_Vertical:
   meta: *LSEM_meta
   pads: *LSEM_pads
   layout: {width: 28.4, height: 4.98}
@@ -179,7 +179,7 @@ Samtec_LSEM-130-xx-x-DV-A-N_Vertical:
   holes:
     - {drill: 1.5, space: 25.7, y: -0.85}
 
-Samtec_LSEM-140-xx-x-DV-A-N_Vertical:
+Samtec_LSEM-140-xx.x-x-DV-A-N_Vertical:
   meta: *LSEM_meta
   pads: *LSEM_pads
   layout: {width: 36.4, height: 4.98}
@@ -187,7 +187,7 @@ Samtec_LSEM-140-xx-x-DV-A-N_Vertical:
   holes:
     - {drill: 1.5, space: 33.7, y: -0.85}
 
-Samtec_LSEM-150-xx-x-DV-A-N_Vertical:
+Samtec_LSEM-150-xx.x-x-DV-A-N_Vertical:
   meta: *LSEM_meta
   pads: *LSEM_pads
   layout: {width: 44.4, height: 4.98}

From c4bcac382b1b037f6665cc559cf6fab8e9bc090e Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Mon, 6 Jul 2020 09:19:50 -0700
Subject: [PATCH 31/62] QStrip_QPairs_Vertical: rename plane pads to "P{bank}"

---
 scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
index 511738f3d..68043dac1 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
@@ -159,7 +159,7 @@ def generate_one_footprint(param, config, default_lib):
         mid = bank1_mid + b*bank_x # Bank midpoint
         # Iterate through space/width list to generate ground pads...
         for (space, width) in [(-s,w) for s,w in reversed(gnd_sw)] + gnd_sw:
-            pad = Pad(number = str(n),
+            pad = Pad(number = "P" + str(b+1),
                       at = (mid + space/2, 0),
                       size = (width, gnd_h),
                       type = Pad.TYPE_SMT,

From c81552ffecd5f9b1f340b9c012edd3dd4b6b73a3 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Mon, 6 Jul 2020 10:08:17 -0700
Subject: [PATCH 32/62] Change QStrip_QPairs_Vertical.yaml property names

---
 .../Connector_Samtec/QStrip_QPairs_Vertical.py       |  6 +++---
 .../Connector_Samtec/QStrip_QPairs_Vertical.yaml     | 12 ++++++------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
index 68043dac1..d6eafaf69 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
@@ -148,10 +148,10 @@ def generate_one_footprint(param, config, default_lib):
             n += 1
     
     # Ground pad parameters
-    gnd_h = param['pads']['ground']['height']
+    gnd_h = param['pads']['plane']['height']
     # Combine spacing and width data into a zipped list: [(space,width), ...]
-    gnd_sw = [sw for sw in zip(param['pads']['ground']['space'],
-                               param['pads']['ground']['width'])]
+    gnd_sw = [sw for sw in zip(param['pads']['plane']['space'],
+                               param['pads']['plane']['width'])]
     gnd_sw.sort() # Sort from lowest (inner) to highest (outer) spacing
     
     # Place ground plane pads
diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
index eca43e7c3..c3b098245 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
@@ -26,7 +26,7 @@ Samtec_QTH-030-xx-x-D_P0.5mm_Vertical: &QTH-030-xx-x-D
   banks: {n: 1, diff: 0, slots: 60, space: 20.0, width: 16.5, height: 4.0}
   pads: &QTH_pads
     signal: {pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
-    ground: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
+    plane: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
 
 Samtec_QTH-030-xx-x-D-A_P0.5mm_Vertical:
   <<: *QTH-030-xx-x-D
@@ -197,7 +197,7 @@ Samtec_QSH-030-xx-x-D_P0.5mm_Vertical: &QSH-030-xx-x-D
   banks: {n: 1, diff: 0, slots: 60, space: 20.0, width: 16.0, height: 3.8}
   pads: &QSH_pads
     signal: {pitch: 0.5, y: 2.67, width: 0.279, height: 2.27}
-    ground: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
+    plane: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
 
 Samtec_QSH-030-xx-x-D-A_P0.5mm_Vertical:
   <<: *QSH-030-xx-x-D
@@ -338,7 +338,7 @@ Samtec_QTS-025-xx-x-D_P0.635mm_Vertical: &QTS-025-xx-x-D
   banks: {n: 1, diff: 0, slots: 50, space: 20.0, width: 16.5, height: 4.0}
   pads: &QTS_pads
     signal: {pitch: 0.635, y: 3.086, width: 0.406, height: 1.45}
-    ground: {height: 0.635, width: [2.54, 4.7], space: [16.89, 6.35]}
+    plane: {height: 0.635, width: [2.54, 4.7], space: [16.89, 6.35]}
 
 Samtec_QTS-025-xx-x-D-A_P0.635mm_Vertical:
   <<: *QTS-025-xx-x-D
@@ -447,7 +447,7 @@ Samtec_QSS-025-xx-x-D_P0.635mm_Vertical: &QSS-025-xx-x-D
   banks: {n: 1, diff: 0, slots: 50, space: 20.0, width: 16.0, height: 3.66}
   pads: &QSS_pads
     signal: {pitch: 0.635, y: 2.865, width: 0.406, height: 2.273}
-    ground: {height: 0.432, width: [2.8, 4.7], space: [16.13, 6.35]}
+    plane: {height: 0.432, width: [2.8, 4.7], space: [16.13, 6.35]}
 
 Samtec_QSS-025-xx-x-D-A_P0.635mm_Vertical:
   <<: *QSS-025-xx-x-D
@@ -556,7 +556,7 @@ Samtec_QTE-020-xx-x-D_P0.8mm_Vertical: &QTE-020-xx-x-D
   banks: {n: 1, diff: 0, slots: 40, space: 20.0, width: 16.5, height: 4.0}
   pads: &QTE_pads
     signal: {pitch: 0.8, y: 2.98, width: 0.46, height: 1.94}
-    ground: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
+    plane: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
 
 Samtec_QTE-020-xx-x-D-A_P0.8mm_Vertical:
   <<: *QTE-020-xx-x-D
@@ -679,7 +679,7 @@ Samtec_QSE-020-xx-x-D_P0.8mm_Vertical: &QSE-020-xx-x-D
   banks: {n: 1, diff: 0, slots: 40, space: 20.0, width: 16.0, height: 3.8}
   pads: &QSE_pads
     signal: {pitch: 0.8, y: 2.87, width: 0.41, height: 2.27}
-    ground: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
+    plane: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
 
 Samtec_QSE-020-xx-x-D-A_P0.8mm_Vertical:
   <<: *QSE-020-xx-x-D

From 5f4e7bb4378b709ffdbc767a38ce657ea5b7ff8c Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Tue, 7 Jul 2020 11:08:25 -0600
Subject: [PATCH 33/62] Minor update to YAML schema

---
 .../Connector_Samtec/QStrip_QPairs_Vertical.py   | 16 ++++++++--------
 .../Connector_Samtec/QStrip_QPairs_Vertical.yaml | 12 ++++++------
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
index d6eafaf69..d9ec0aec7 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
@@ -40,13 +40,13 @@
     space: !!float mm # distance between adjacent banks
     width: !!float mm # width of bank outline drawn on F.Fab
     height: !!float mm # height of bank outline drawn on F.Fab
-  pins:
+  pads:
     signal: # signal pin parameters
       pitch: !!float mm
       width: !!float mm # Pad width
       height: !!float mm # Pad height
       y: !!float mm # vertical offset
-    ground: # ground pin parameters
+    planes: # plane parameters
       width:
         - !!float mm # outer pins 
         - !!float mm # inner pins
@@ -148,10 +148,10 @@ def generate_one_footprint(param, config, default_lib):
             n += 1
     
     # Ground pad parameters
-    gnd_h = param['pads']['plane']['height']
+    gnd_h = param['pads']['planes']['height']
     # Combine spacing and width data into a zipped list: [(space,width), ...]
-    gnd_sw = [sw for sw in zip(param['pads']['plane']['space'],
-                               param['pads']['plane']['width'])]
+    gnd_sw = [sw for sw in zip(param['pads']['planes']['space'],
+                               param['pads']['planes']['width'])]
     gnd_sw.sort() # Sort from lowest (inner) to highest (outer) spacing
     
     # Place ground plane pads
@@ -378,9 +378,9 @@ def generate_one_footprint(param, config, default_lib):
 
     # 3D model path
     library = param.get('library', default_lib)
-    model_path = os.path.join('${KISYS3DMOD}',
-                              library+'.3dshapes',
-                              param['name'] + '.wrl')
+    model_path = os.path.join("${KISYS3DMOD}",
+                              library+".3dshapes",
+                              param['name'] + ".wrl")
     fp.append(Model(filename = model_path))
 
     ############################################################################
diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
index c3b098245..420970346 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
@@ -26,7 +26,7 @@ Samtec_QTH-030-xx-x-D_P0.5mm_Vertical: &QTH-030-xx-x-D
   banks: {n: 1, diff: 0, slots: 60, space: 20.0, width: 16.5, height: 4.0}
   pads: &QTH_pads
     signal: {pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
-    plane: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
+    planes: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
 
 Samtec_QTH-030-xx-x-D-A_P0.5mm_Vertical:
   <<: *QTH-030-xx-x-D
@@ -197,7 +197,7 @@ Samtec_QSH-030-xx-x-D_P0.5mm_Vertical: &QSH-030-xx-x-D
   banks: {n: 1, diff: 0, slots: 60, space: 20.0, width: 16.0, height: 3.8}
   pads: &QSH_pads
     signal: {pitch: 0.5, y: 2.67, width: 0.279, height: 2.27}
-    plane: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
+    planes: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
 
 Samtec_QSH-030-xx-x-D-A_P0.5mm_Vertical:
   <<: *QSH-030-xx-x-D
@@ -338,7 +338,7 @@ Samtec_QTS-025-xx-x-D_P0.635mm_Vertical: &QTS-025-xx-x-D
   banks: {n: 1, diff: 0, slots: 50, space: 20.0, width: 16.5, height: 4.0}
   pads: &QTS_pads
     signal: {pitch: 0.635, y: 3.086, width: 0.406, height: 1.45}
-    plane: {height: 0.635, width: [2.54, 4.7], space: [16.89, 6.35]}
+    planes: {height: 0.635, width: [2.54, 4.7], space: [16.89, 6.35]}
 
 Samtec_QTS-025-xx-x-D-A_P0.635mm_Vertical:
   <<: *QTS-025-xx-x-D
@@ -447,7 +447,7 @@ Samtec_QSS-025-xx-x-D_P0.635mm_Vertical: &QSS-025-xx-x-D
   banks: {n: 1, diff: 0, slots: 50, space: 20.0, width: 16.0, height: 3.66}
   pads: &QSS_pads
     signal: {pitch: 0.635, y: 2.865, width: 0.406, height: 2.273}
-    plane: {height: 0.432, width: [2.8, 4.7], space: [16.13, 6.35]}
+    planes: {height: 0.432, width: [2.8, 4.7], space: [16.13, 6.35]}
 
 Samtec_QSS-025-xx-x-D-A_P0.635mm_Vertical:
   <<: *QSS-025-xx-x-D
@@ -556,7 +556,7 @@ Samtec_QTE-020-xx-x-D_P0.8mm_Vertical: &QTE-020-xx-x-D
   banks: {n: 1, diff: 0, slots: 40, space: 20.0, width: 16.5, height: 4.0}
   pads: &QTE_pads
     signal: {pitch: 0.8, y: 2.98, width: 0.46, height: 1.94}
-    plane: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
+    planes: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
 
 Samtec_QTE-020-xx-x-D-A_P0.8mm_Vertical:
   <<: *QTE-020-xx-x-D
@@ -679,7 +679,7 @@ Samtec_QSE-020-xx-x-D_P0.8mm_Vertical: &QSE-020-xx-x-D
   banks: {n: 1, diff: 0, slots: 40, space: 20.0, width: 16.0, height: 3.8}
   pads: &QSE_pads
     signal: {pitch: 0.8, y: 2.87, width: 0.41, height: 2.27}
-    plane: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
+    planes: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
 
 Samtec_QSE-020-xx-x-D-A_P0.8mm_Vertical:
   <<: *QSE-020-xx-x-D

From 494053c5fde600c1d6ff509af186ea4f2128395a Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sun, 12 Jul 2020 08:44:15 -0700
Subject: [PATCH 34/62] Create initial version of QStrip_QPairs_Horizontal
 script

---
 .../QStrip_QPairs_Horizontal.py               | 354 ++++++++++++++++++
 .../QStrip_QPairs_Horizontal.yaml             |  41 ++
 2 files changed, 395 insertions(+)
 create mode 100755 scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.py
 create mode 100644 scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.yaml

diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.py b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.py
new file mode 100755
index 000000000..a0d03a9bd
--- /dev/null
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.py
@@ -0,0 +1,354 @@
+#!/usr/bin/python
+
+# This file is part of kicad-footprint-generator.
+# 
+# kicad-footprint-generator is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+# 
+# kicad-footprint-generator is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+# more details. You should have received a copy of the GNU General Public
+# License along with kicad-footprint-generator. If not, see
+# <http://www.gnu.org/licenses/>.
+# 
+# Copyright (C) 2019 by Caleb Reister <calebreister@gmail.com>
+#
+
+"""
+YAML footprint specification
+---
+Footprint_Name:
+  library: 'library name' # [optional] KiCad library to use, overrides default
+  meta: # Footprint metadata
+    pn: 'part number' # [optional] overrides automatic part number detection
+    description: 'Brief description of the footprint'
+    datasheet: 'URL(s) to footprint datasheet'
+    tags: 'KiCad tags go here'
+  add-tags: 'more tags' # [optional] extends the tag list
+  layout: # General footprint layout/drawing data
+    type: '(Terminal|Socket)' # sets Pin 1 position and drawing mode
+    width: !!float mm # [cosmetic] overall width of the connector
+    height: !!float mm # [cosmetic] overall height of the connector
+  width: !!float mm # [optional, cosmetic] overrides layout::width
+  banks:
+    n: !!uint # number of banks in the connector
+    diff: !!uint # number of differential banks
+    space: !!float mm # distance between adjacent banks
+    width: !!float mm # width of bank outline drawn on F.Fab
+    height: !!float mm # height of bank outline drawn on F.Fab
+  pads:
+    signal: # signal pin parameters
+      pitch: !!float mm
+      width: !!float mm # Pad width
+      height: !!float mm # Pad height
+      y: !!float mm # vertical offset
+    planes: # plane parameters
+      width:
+        - !!float mm # outer pins 
+        - !!float mm # inner pins
+      height: !!float mm # Ground pad heights
+      space: # Distance between ground pads within each bank
+        - !!float mm # outer pins
+        - !!float mm # inner pins
+  holes: # [optional] hole pair specifications, mirrored about y axis
+    - # Hole spec. 1
+      name: "" # [optional] name/number for plated holes
+      drill: !!float mm # drill diameter (a list produces an oval)
+      pad: !!float mm # [optional] PTH pad diameter (a list produces an oval)
+      space: !!float mm # distance between holes mirrored about the y-axis
+      y: !!float mm # vertical offset
+    - # Hole spec. 2...
+...
+"""
+
+import sys
+import os
+import argparse
+from copy import deepcopy
+import math
+import yaml
+
+# Load parent path of KicadModTree
+sys.path.append(os.path.join(sys.path[0], "..", "..", ".."))
+sys.path.append(os.path.join(sys.path[0], "..", "..", "tools"))
+
+from KicadModTree import *
+from footprint_text_fields import addTextFields
+from helpers import *
+
+def generate_one_footprint(param, config, default_lib):
+    fp = Footprint(param['name'])
+    
+    # Terminal or Socket mode
+    mode = param['layout']['type'].capitalize()
+    
+    # Bank parameters
+    banks  = param['banks']['n']
+    bank_x = param['banks']['space']
+    bank_w = param['banks']['width']
+    bank_h = param['banks']['height']
+
+    ############################################################################
+    # Copper layer(s)
+    
+    # Signal pad parameters
+    pad_pitch = param['pads']['signal']['pitch']
+    pad_w = param['pads']['signal']['width']
+    pad_h = param['pads']['signal']['height']
+    pad_y = param['pads']['signal']['y']
+    pad_n = param['pads']['signal']['n']
+
+    # Plane parameters
+    plane_pitch = param['pads']['plane']['pitch']
+    plane_d = param['pads']['plane']['drill']
+    plane_p = param['pads']['plane']['pad']
+    plane_y = param['pads']['plane']['y']
+    plane_n = param['pads']['plane']['n']
+
+    # Pin 1 position
+    pin1 = Vector2D(0,0)
+    pin1.x = -(pad_n / 4)*pad_pitch + pad_pitch/2 - ((banks-1) / 2)*bank_x
+    if mode == "Terminal":
+        pin1.y = -pad_y
+    elif mode == "Socket":
+        pin1.y = pad_y
+    else:
+        raise ValueError("Connector type must be either 'Terminal' or 'Socket'")
+    
+    # Bank 1 center point
+    bank1_mid = pin1.x - pad_pitch/2 + (pad_n / 4)*pad_pitch
+
+    # Place signal pads
+    n = 1 # Pin counter
+    pin = [] # Pin position list, organized by bank
+    for b in range(banks):
+        pin.append([])
+        for slot in range(pad_n):
+            # Compute next pad location
+            pos = {'x': pin1.x + (slot // 2)*pad_pitch + b*bank_x,
+                   'y': pin1.y - (slot  % 2)*(2*pin1.y),
+                   'n': n+1, 'slot': slot}
+
+            # Skip slots for differential banks
+            if b < param['banks']['diff']:
+                if ((slot+1) % 6 == 0 or # Skip every 3rd odd slot
+                    (slot+2) % 6 == 0 or # Skip every 3rd even slot
+                    # Only add end-of-bank pins if they are completing a pair
+                    (slot+2 >= pad_n and
+                     pin[b][-2]['slot'] != slot-2)):
+                    continue
+
+            # Create pad
+            pin[b].append(pos) # Add position to list
+            # Create pad (both single-ended and differential)
+            pad = Pad(number = str(n),
+                      at = pos,
+                      size = (pad_w, pad_h),
+                      type = Pad.TYPE_SMT,
+                      layers = Pad.LAYERS_SMT,
+                      shape = Pad.SHAPE_RECT)
+            fp.append(pad)
+            n += 1
+        
+        mid = bank1_mid + b*bank_x # Bank midpoint
+        for h in range(plane_n):
+            hole = Pad(number = "P" + str(b+1),
+                       at     = ((h - (plane_n-1)/2)*plane_pitch + mid, plane_y),
+                       drill  = plane_d,
+                       size   = plane_p,
+                       type   = Pad.TYPE_THT,
+                       layers = Pad.LAYERS_THT,
+                       shape  = Pad.SHAPE_CIRCLE)
+            fp.append(hole)
+    
+    ############################################################################
+    # Holes
+    if 'holes' in param:
+        for p in param['holes']:
+            drill = p['drill']
+            shape = Pad.SHAPE_CIRCLE if type(drill) is float else Pad.SHAPE_OVAL
+            h = [Pad(number = "MP" if 'pad' in p else "",
+                     at     = (m*p['space']/2, p['y']),
+                     drill  = drill,
+                     size   = p['pad'] if 'pad' in p else drill,
+                     type   = Pad.TYPE_THT if 'pad' in p else Pad.TYPE_NPTH,
+                     layers = Pad.LAYERS_THT if 'pad' in p else Pad.LAYERS_NPTH,
+                     shape  = shape) for m in (-1,1)]
+            fp.extend(h)
+
+    ############################################################################
+    # Fabrication layer: F.Fab
+    fab_line = config['fab_line_width']
+    fab_mark = config['fab_pin1_marker_length']
+    fab_w = param['layout']['width'] if 'width' not in param else param['width']
+    fab_h = param['layout']['height']
+    fab_y = fab_h / 2
+    lEdge = -fab_w / 2
+    rEdge = lEdge + fab_w
+    chamfer = fab_h / 4 # 1/4 connector height, cosmetic only
+
+    if param['layout']['type'] == "Terminal":
+        # Plug outline
+        plug_h = param['layout']['plug']['height']
+        fp.append(RectLine(start  = (-banks*bank_w/2, -fab_y),
+                           end    = ( banks*bank_w/2, -fab_y - plug_h),
+                           layer  = "F.CrtYd",
+                           width  = fab_line))
+    
+    ############################################################################
+    # Silkscreen: F.SilkS
+    #silk_offset = param['layout']['silk-offset']
+    silk_offset = config['silk_fab_offset']
+    silk_pad = {'x': config['silk_pad_clearance'] + pad_w/2,
+                'y': config['silk_pad_clearance'] + pad_h/2}
+    silk_line = config['silk_line_width']
+    silk_y = fab_y + silk_offset
+    silk_lEdge = lEdge - silk_offset
+    silk_rEdge = rEdge + silk_offset
+    silk_chamfer = chamfer + silk_offset/2
+    silk_pin1 = pin1.x - silk_pad['x']
+
+    ############################################################################
+    # PCB Edge: Dwgs.User
+    fp.append(Line(start = (lEdge, param['layout']['edge']),
+                   end   = (rEdge, param['layout']['edge']),
+                   layer = "Dwgs.User",
+                   width = fab_line))
+    
+    fp.append(Text(type = "user", text = "PCB Edge",
+                   at = (0, param['layout']['edge'] - 1.0),
+                   layer = "Dwgs.User"))
+
+    ############################################################################
+    # Courtyard: F.CrtYd
+    court_line = config['courtyard_line_width']
+    court_grid = config['courtyard_grid']
+    court_offset = config['courtyard_offset']['connector']
+
+    court_x = roundToBase(fab_w/2 + court_offset, court_grid)
+    court_y = roundToBase(max(fab_y, pad_y + pad_h/2) + court_offset, court_grid)
+
+    fp.append(RectLine(start  = (-court_x, -court_y),
+                       end    = ( court_x,  court_y),
+                       layer  = "F.CrtYd",
+                       width  = court_line))
+    
+    ############################################################################
+    # Set Metadata
+    
+    # Draw reference and value
+    text_y = court_y + 1.0
+    fp.append(Text(type = 'reference', text = 'REF**',
+                   at = (0, -text_y),
+                   layer = "F.SilkS"))
+    fp.append(Text(type = 'user', text = '%R',
+                   at = (0, -text_y),
+                   layer = "F.Fab"))
+    fp.append(Text(type = 'value', text=param['name'],
+                   at = (0, text_y),
+                   layer="F.Fab"))
+    
+    # Set surface-mount attribute
+    fp.setAttribute('smd')
+    
+    # Part number
+    partnum = param['meta'].get('pn', param['name'].split('_')[1])
+
+    # Pins or pairs/bank
+    if param['banks']['diff'] == banks:
+        # Differential mode: round up to nearest even number of pairs
+        pins_or_pairs = (pad_n // 3) + (pad_n // 3) % 2
+    else:
+        pins_or_pairs = pad_n
+
+    # Description
+    desc = param['meta']['description']
+    desc = desc.format(pn = partnum,
+                       type = mode,
+                       ds = param['meta']['datasheet'],
+                       pitch = pad_pitch,
+                       banks = banks,
+                       pins = pins_or_pairs)
+    fp.setDescription(desc)
+
+    # Tags
+    tags = param['meta']['tags']
+    if 'add-tags' in param:
+        tags += ' ' + param['add-tags']
+    fp.setTags(tags)
+
+    # 3D model path
+    library = param.get('library', default_lib)
+    model_path = os.path.join("${KISYS3DMOD}",
+                              library+".3dshapes",
+                              param['name'] + ".wrl")
+    fp.append(Model(filename = model_path))
+
+    ############################################################################
+    # Write kicad_mod file
+    
+    os.makedirs(library+'.pretty', exist_ok=True)
+    filename = os.path.join(library+'.pretty', param['name']+'.kicad_mod')
+    KicadFileHandler(fp).writeFile(filename)
+
+################################################################################
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser()
+    parser.add_argument('--global-config', type=str, nargs='?',
+                        default='../../tools/global_config_files/config_KLCv3.0.yaml',
+                        help='Global KLC configuration YAML file')
+    parser.add_argument('--series-config', type=str, nargs='?',
+                        default='../conn_config_KLCv3.yaml',
+                        help='Series KLC configuration YAML file')
+    parser.add_argument('--library', type=str, nargs='?',
+                        default='Connector_Samtec_QStrip_QPairs',
+                        help='Default KiCad library name (without extension)')
+    parser.add_argument('files', metavar='file', type=str, nargs='*',
+                        help='YAML file(s) containing footprint parameters')
+    args = parser.parse_args()
+
+    with open(args.global_config, 'r') as config_stream:
+        try:
+            config = yaml.safe_load(config_stream)
+        except yaml.YAMLError as exc:
+            print(exc)
+
+    with open(args.series_config, 'r') as config_stream:
+        try:
+            config.update(yaml.safe_load(config_stream))
+        except yaml.YAMLError as exc:
+            print(exc)
+
+    if len(args.files) == 0:
+        parser.print_help()
+        sys.exit(1)
+
+    print("Default Library:", args.library)
+    
+    for path in args.files:
+        print("Reading", path)
+        with open(path, 'r') as stream:
+            try:
+                footprints = yaml.safe_load(stream)
+                
+                if footprints is None:
+                    print(path, "empty, skipping...")
+                    continue
+
+                for fp_name in footprints:
+                    fp_params = footprints.get(fp_name)                    
+                    if 'name' in fp_params:
+                        print("WARNING: setting 'name' to", fp_name)
+                        
+                    fp_params['name'] = fp_name
+
+                    print("  - ",
+                          fp_params.get('library', args.library), ".pretty/",
+                          fp_name, ".kicad_mod", sep="")
+                    
+                    generate_one_footprint(fp_params, config, args.library)
+            except yaml.YAMLError as exc:
+                print(exc)
diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.yaml b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.yaml
new file mode 100644
index 000000000..de8f441f1
--- /dev/null
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.yaml
@@ -0,0 +1,41 @@
+# QTH-RA family
+Samtec_QTH-030-xx-x-D-RA_P0.5mm_Horizontal:
+  meta: &QTH-RA_meta
+    description: >-
+      Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip;
+      {banks:d} bank(s), {pins:d} pins/bank; {ds:s}
+    tags: "connector Samtec Q-Strip QTH mezzanine terminal horizontal single-ended"
+    datasheet: >-
+      [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-mkt.pdf),
+      [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf)
+  layout: {type: "Terminal", width: 25.72, height: 9.78, edge: -3.309, plug:
+    {width: 20.0, height: 3.05}}
+  banks: {n: 1, diff: 0, space: 20.0, width: 16.5, height: 4.0}
+  pads: &QTH-RA_pads
+    signal: {n: 60, pitch: 0.5, y: 2.3055, width: 0.305, height: 1.45}
+    plane: {n: 8, pitch: 2.032, y: 0, drill: 0.533, pad: 1.0}
+  holes: # Holes sorted by dimension labels in Samtec ECN-264948 Rev. E
+    - {drill: 1.067, pad: 1.8, space: 23.178, y: -2.197} # "A"
+    - {drill: 1.448,           space: 21.908, y: 0.851}  # "B"
+    - {drill: 1.067, pad: 1.8, space: 18.190, y: 3.607}  # "C"
+
+Samtec_QTH-060-xx-x-D-RA_P0.5mm_Horizontal:
+  meta: *QTH-RA_meta
+  pads: *QTH-RA_pads
+  layout: {type: "Terminal", width: 45.72, height: 1.45, edge: -3.309, plug:
+    {width: 40.01, height: 3.05}}
+  banks: {n: 2, diff: 0, space: 20.0, width: 16.5, height: 4.0}
+  holes:
+    - {drill: 1.067, pad: 1.8, space: 43.180, y: -2.197} # "A"
+    - {drill: 1.448,           space: 41.910, y: 0.851}  # "B"
+    - {drill: 1.067, pad: 1.8, space: 38.913, y: 3.607}  # "C"
+
+Samtec_QTH-090-xx-x-D-RA_P0.5mm_Horizontal:
+  meta: *QTH-RA_meta
+  pads: *QTH-RA_pads
+  layout: {type: "Terminal", width: 65.72, height: 1.45, edge: -3.309, plug: {height: 3.05}}
+  banks: {n: 3, diff: 0, space: 20.0, width: 16.5, height: 4.0}
+  holes:
+    - {drill: 1.067, pad: 1.8, space: 63.183, y: -2.197} # "A"
+    - {drill: 1.448,           space: 61.913, y: 0.851}  # "B"
+    - {drill: 1.067, pad: 1.8, space: 58.915, y: 3.607}  # "C"

From b442e13982c4bfe0d4d4890b72873fe2a1a6378c Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Tue, 28 Jul 2020 19:44:39 -0700
Subject: [PATCH 35/62] Rewrite QStrip_QPairs_Vertical code to draw sockets
 from right to left so that pin 1 is on top.

---
 .../QStrip_QPairs_Vertical.py                 | 138 ++++++++----------
 .../QStrip_QPairs_Vertical.yaml               |  38 ++---
 2 files changed, 83 insertions(+), 93 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
index d9ec0aec7..dac9cd89f 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
@@ -85,6 +85,13 @@ def generate_one_footprint(param, config, default_lib):
     
     # Terminal or Socket mode
     mode = param['layout']['type'].capitalize()
+    if mode == "Terminal":
+        x_inv = 1
+    elif mode == "Socket":
+        x_inv = -1
+    else:
+        raise ValueError("Connector type must be either 'Terminal' or 'Socket'")
+
     
     # Bank parameters
     banks  = param['banks']['n']
@@ -105,24 +112,27 @@ def generate_one_footprint(param, config, default_lib):
     # Pin 1 position
     pin1 = Vector2D(0,0)
     pin1.x = -(bank_slots / 4)*pitch + pitch/2 - ((banks-1) / 2)*bank_x
-    if mode == "Terminal":
-        pin1.y = -pad_y
-    elif mode == "Socket":
-        pin1.y = pad_y
-    else:
-        raise ValueError("Connector type must be either 'Terminal' or 'Socket'")
+    pin1.y = -pad_y
     
     # Bank 1 center point
-    bank1_mid = pin1.x - pitch/2 + (bank_slots / 4)*pitch
+    bank1_mid = x_inv * (pin1.x - pitch/2 + (bank_slots / 4)*pitch)
+
+    # Ground pad parameters
+    gnd_h = param['pads']['planes']['height']
+    # Combine spacing and width data into a zipped list: [(space,width), ...]
+    gnd_sw = [sw for sw in zip(param['pads']['planes']['space'],
+                               param['pads']['planes']['width'])]
+    gnd_sw.sort() # Sort from lowest (inner) to highest (outer) spacing
 
-    # Place signal pads
+    # Place pads
     n = 1 # Pin counter
     pin = [] # Pin position list, organized by bank
-    for b in range(0, banks):
+    for b in range(banks):
         pin.append([])
+        # Place signal pads
         for slot in range(bank_slots):
             # Compute next pad location
-            pos = {'x': pin1.x + (slot // 2)*pitch + b*bank_x,
+            pos = {'x': x_inv * (pin1.x + (slot // 2)*pitch + b*bank_x),
                    'y': pin1.y - (slot  % 2)*(2*pin1.y),
                    'n': n+1, 'slot': slot}
 
@@ -147,16 +157,8 @@ def generate_one_footprint(param, config, default_lib):
             fp.append(pad)
             n += 1
     
-    # Ground pad parameters
-    gnd_h = param['pads']['planes']['height']
-    # Combine spacing and width data into a zipped list: [(space,width), ...]
-    gnd_sw = [sw for sw in zip(param['pads']['planes']['space'],
-                               param['pads']['planes']['width'])]
-    gnd_sw.sort() # Sort from lowest (inner) to highest (outer) spacing
-    
-    # Place ground plane pads
-    for b in range(banks):
-        mid = bank1_mid + b*bank_x # Bank midpoint
+        # Place plane pads
+        mid = bank1_mid + x_inv*b*bank_x # Bank midpoint
         # Iterate through space/width list to generate ground pads...
         for (space, width) in [(-s,w) for s,w in reversed(gnd_sw)] + gnd_sw:
             pad = Pad(number = "P" + str(b+1),
@@ -190,15 +192,14 @@ def generate_one_footprint(param, config, default_lib):
     fab_w = param['layout']['width'] if 'width' not in param else param['width']
     fab_h = param['layout']['height']
     fab_y = fab_h / 2
-    lEdge = -fab_w / 2
-    rEdge = lEdge + fab_w
+    fab_edge = fab_w/2
     chamfer = fab_h / 4 # 1/4 connector height, cosmetic only
 
     if mode == 'Terminal':
         # Left end outline
-        lEnd = [(lEdge, -fab_y),
-                (lEdge, fab_y-chamfer),
-                (lEdge+chamfer, fab_y)]
+        lEnd = [(-fab_edge, -fab_y),
+                (-fab_edge, fab_y-chamfer),
+                (-fab_edge+chamfer, fab_y)]
         fp.append(PolygoneLine(nodes = lEnd,
                                layer = "F.Fab",
                                width = fab_line))
@@ -208,12 +209,12 @@ def generate_one_footprint(param, config, default_lib):
                                width = fab_line,
                                x_mirror = 0))
         # Top and bottom lines
-        fp.append(Line(start = (lEdge, -fab_y),
-                       end   = (rEdge, -fab_y),
+        fp.append(Line(start = (-fab_edge, -fab_y),
+                       end   = ( fab_edge, -fab_y),
                        layer = "F.Fab",
                        width = fab_line))
-        fp.append(Line(start = (lEdge+chamfer, fab_y),
-                       end   = (rEdge-chamfer, fab_y),
+        fp.append(Line(start = (-fab_edge+chamfer, fab_y),
+                       end   = ( fab_edge-chamfer, fab_y),
                        layer = "F.Fab",
                        width = fab_line))
         # Pin 1 marker
@@ -226,30 +227,31 @@ def generate_one_footprint(param, config, default_lib):
                               line_width = fab_line))
     elif mode == 'Socket':
         # Outline rectangle
-        fp.append(RectLine(start = (lEdge, -fab_y),
-                           end   = (rEdge,  fab_y),
+        fp.append(RectLine(start = (-fab_edge, -fab_y),
+                           end   = ( fab_edge,  fab_y),
                            layer = "F.Fab",
                            width = fab_line))
         # Chamfer lines
-        fp.append(Line(start = (lEdge, -fab_y+chamfer),
-                       end   = (lEdge+chamfer, -fab_y),
+        fp.append(Line(start = (-fab_edge, fab_y-chamfer),
+                       end   = (-fab_edge+chamfer, fab_y),
                        layer = "F.Fab",
                        width = fab_line))
-        fp.append(Line(start = (rEdge, -fab_y+chamfer),
-                       end   = (rEdge-chamfer, -fab_y),
+        fp.append(Line(start = (fab_edge, fab_y-chamfer),
+                       end   = (fab_edge-chamfer, fab_y),
                        layer = "F.Fab",
                        width = fab_line))
         # Pin 1 marker
-        fp.append(markerArrow(x = pin1.x,
-                              y = (fab_h-fab_mark) / 2,
+        fp.append(markerArrow(x = -pin1.x,
+                              y = -(fab_h-fab_mark) / 2,
                               width = fab_mark,
+                              angle = 180,
                               layer = "F.Fab",
                               close = False,
                               line_width = fab_line))
 
     # Draw bank and ground plane outlines
     for b in range(banks):
-        mid = bank1_mid + b*bank_x
+        mid = bank1_mid + x_inv*b*bank_x
         # Bank outline
         fp.append(RectLine(start = (mid-bank_w/2, -bank_h/2),
                            end   = (mid+bank_w/2,  bank_h/2),
@@ -258,63 +260,51 @@ def generate_one_footprint(param, config, default_lib):
     
     ############################################################################
     # Silkscreen: F.SilkS
-    #silk_offset = param['layout']['silk-offset']
     silk_offset = config['silk_fab_offset']
     silk_pad = {'x': config['silk_pad_clearance'] + pad_w/2,
                 'y': config['silk_pad_clearance'] + pad_h/2}
     silk_line = config['silk_line_width']
     silk_y = fab_y + silk_offset
-    silk_lEdge = lEdge - silk_offset
-    silk_rEdge = rEdge + silk_offset
+    silk_edge = fab_edge + silk_offset
     silk_chamfer = chamfer + silk_offset/2
-    silk_pin1 = pin1.x - silk_pad['x']
     
     if mode == 'Terminal':
         # Polygon left end outline points
-        silk_lEnd = [{'x': silk_pin1,  'y': -silk_y},
-                     {'x': silk_lEdge, 'y': -silk_y},
-                     {'x': silk_lEdge, 'y': silk_y-silk_chamfer},
-                     {'x': silk_lEdge+silk_chamfer, 'y': silk_y},
-                     {'x': silk_pin1,  'y': silk_y}]
+        silk_end = [[(pin[i][i]['x']+m*silk_pad['x'], -silk_y),
+                     (m*silk_edge, -silk_y),
+                     (m*silk_edge,  silk_y-silk_chamfer),
+                     (m*(silk_edge-silk_chamfer), silk_y),
+                     (pin[i][i]['x']+m*silk_pad['x'],  silk_y)]
+                    for (i,m) in ((0,-1), (-1,1))]
         # Pin 1 indicator
-        fp.append(Line(start = (silk_pin1, pin1.y - pad_h/2),
-                       end   = (silk_pin1, -silk_y),
+        fp.append(Line(start = (pin[0][0]['x']-silk_pad['x'], pin1.y - pad_h/2),
+                       end   = (pin[0][0]['x']-silk_pad['x'], -silk_y),
                        layer = "F.SilkS",
                        width = silk_line))
     elif mode == 'Socket':
         # Left end outline points
-        silk_lEnd = [{'x': silk_pin1,  'y':  silk_y},
-                     {'x': silk_lEdge, 'y':  silk_y},
-                     {'x': silk_lEdge, 'y': -silk_y},
-                     {'x': silk_pin1,  'y': -silk_y}]
+        silk_end = [[(pin[i][i]['x']+m*silk_pad['x'],  silk_y),
+                     (m*silk_edge,  silk_y),
+                     (m*silk_edge, -silk_y),
+                     (pin[i][i]['x']+m*silk_pad['x'], -silk_y)]
+                    for (i,m) in ((0,1), (-1,-1))]
         # Pin 1 indicator
-        fp.append(markerArrow(x = pin1.x,
-                              y = pin1.y + silk_pad['y'],
+        fp.append(markerArrow(x = pin[0][0]['x'],
+                              y = pin[0][0]['y'] - silk_pad['y'],
                               width = fab_mark / 2,
                               line_width = silk_line,
+                              angle = 180,
                               layer = "F.SilkS"))
-
-    # Generate right end outline
-    silk_rEnd = deepcopy(silk_lEnd)
-    # Mirror about x axis
-    for i in range(len(silk_rEnd)):
-        silk_rEnd[i]['x'] = -silk_rEnd[i]['x']
-    # Define right outline inner offset from the last pin
-    # (if the last bank is differential, it does not perfectly mirror the first)
-    silk_rEnd[0]['x'] = silk_rEnd[-1]['x'] = pin[-1][-1]['x'] + silk_pad['x']
-
-    # Draw left and right end outlines
-    fp.append(PolygoneLine(nodes = silk_lEnd,
-                           layer = "F.SilkS",
-                           width = silk_line))
-    fp.append(PolygoneLine(nodes = silk_rEnd,
-                           layer = "F.SilkS",
-                           width = silk_line))
+    
+    # Draw end outlines
+    fp.extend([PolygoneLine(nodes = end,
+                            layer = "F.SilkS",
+                            width = silk_line) for end in silk_end])
 
     # Draw outlines between banks
     for b in range(banks-1):
-        fp.extend([Line(start = (pin[b][-1]['x']  + silk_pad['x'], m*silk_y),
-                        end   = (pin[b+1][0]['x'] - silk_pad['x'], m*silk_y),
+        fp.extend([Line(start = (pin[b][-1]['x']  + x_inv*silk_pad['x'], m*silk_y),
+                        end   = (pin[b+1][0]['x'] - x_inv*silk_pad['x'], m*silk_y),
                         layer = "F.SilkS",
                         width = silk_line) for m in (-1,1)])
 
diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
index 420970346..8e141ca04 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
@@ -203,7 +203,7 @@ Samtec_QSH-030-xx-x-D-A_P0.5mm_Vertical:
   <<: *QSH-030-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 20.13, y: 2.03}
+    - {drill: 1.02, space: 20.13, y: -2.03}
 
 ## Samtec_QSH-030-xx-x-D-LC_P0.5mm_Vertical:
 ##   <<: *QSH-030-xx-x-D
@@ -222,7 +222,7 @@ Samtec_QSH-060-xx-x-D-A_P0.5mm_Vertical:
   <<: *QSH-060-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 40.13, y: 2.03}
+    - {drill: 1.02, space: 40.13, y: -2.03}
 
 ## Samtec_QSH-060-xx-x-D-LC_P0.5mm_Vertical:
 ##   <<: *QSH-060-xx-x-D
@@ -241,7 +241,7 @@ Samtec_QSH-090-xx-x-D-A_P0.5mm_Vertical:
   <<: *QSH-090-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 60.13, y: 2.03}
+    - {drill: 1.02, space: 60.13, y: -2.03}
 
 ## Samtec_QSH-090-xx-x-D-LC_P0.5mm_Vertical:
 ##   <<: *QSH-090-xx-x-D
@@ -265,7 +265,7 @@ Samtec_QSH-020-xx-x-D-DP-A_P0.5mm_Vertical:
   <<: *QSH-020-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 20.13, y: 2.03}
+    - {drill: 1.02, space: 20.13, y: -2.03}
 
 ## Samtec_QSH-020-xx-x-D-DP-LC_P0.5mm_Vertical:
 ##   <<: *QSH-020-xx-x-D-DP
@@ -283,7 +283,7 @@ Samtec_QSH-040-xx-x-D-DP_P0.5mm_Vertical: &QSH-040-xx-x-D-DP
 Samtec_QSH-040-xx-x-D-DP-A_P0.5mm_Vertical:
   <<: *QSH-040-xx-x-D-DP
   holes:
-    - {drill: 1.02, space: 40.13, y: 2.03}
+    - {drill: 1.02, space: 40.13, y: -2.03}
 
 ## Samtec_QSH-040-xx-x-D-DP-LC_P0.5mm_Vertical:
 ##   <<: *QSH-040-xx-x-D-DP
@@ -300,7 +300,7 @@ Samtec_QSH-060-xx-x-D-DP_P0.5mm_Vertical: &QSH-060-xx-x-D-DP
 Samtec_QSH-060-xx-x-D-DP-A_P0.5mm_Vertical:
   <<: *QSH-060-xx-x-D-DP
   holes:
-    - {drill: 1.02, space: 60.13, y: 2.03}
+    - {drill: 1.02, space: 60.13, y: -2.03}
 
 ## Samtec_QSH-060-xx-x-D-DP-LC_P0.5mm_Vertical:
 ##   <<: *QSH-060-xx-x-D-DP
@@ -323,7 +323,7 @@ Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
   banks: {n: 3, diff: 1, slots: 60, space: 20.0, width: 16.0, height: 3.8}
   pads: *QSH_pads
   holes:
-    - {drill: 1.02, space: 60.13, y: 2.03}
+    - {drill: 1.02, space: 60.13, y: -2.03}
 
 ################################################################################
 # QTS family; 1 bank
@@ -453,7 +453,7 @@ Samtec_QSS-025-xx-x-D-A_P0.635mm_Vertical:
   <<: *QSS-025-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 20.0, y: 2.67}
+    - {drill: 1.02, space: 20.0, y: -2.67}
 
 # QSS family; 2 banks
 Samtec_QSS-050-xx-x-D_P0.635mm_Vertical: &QSS-050-xx-x-D
@@ -466,7 +466,7 @@ Samtec_QSS-050-xx-x-D-A_P0.635mm_Vertical:
   <<: *QSS-050-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 40.0, y: 2.67}
+    - {drill: 1.02, space: 40.0, y: -2.67}
 
 # QSS family; 3 banks
 Samtec_QSS-075-xx-x-D_P0.635mm_Vertical: &QSS-075-xx-x-D
@@ -479,7 +479,7 @@ Samtec_QSS-075-xx-x-D-A_P0.635mm_Vertical:
   <<: *QSS-075-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 60.0, y: 2.67}
+    - {drill: 1.02, space: 60.0, y: -2.67}
 
 # QSS family; 1 bank; differential
 Samtec_QSS-016-xx-x-D-DP_P0.635mm_Vertical: &QSS-016-xx-x-D-DP
@@ -497,7 +497,7 @@ Samtec_QSS-016-xx-x-D-DP-A_P0.635mm_Vertical:
   <<: *QSS-016-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 20.0, y: 2.67}
+    - {drill: 1.02, space: 20.0, y: -2.67}
 
 ## Samtec_QSS-016-xx-x-D-DP-LC_P0.635mm_Vertical:
 ##   <<: *QSS-016-xx-x-D-DP
@@ -516,7 +516,7 @@ Samtec_QSS-032-xx-x-D-DP-A_P0.635mm_Vertical:
   <<: *QSS-032-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 40.0, y: 2.67}
+    - {drill: 1.02, space: 40.0, y: -2.67}
 
 ## Samtec_QSS-032-xx-x-D-DP-LC_P0.635mm_Vertical:
 ##   <<: *QSS-032-xx-x-D-DP
@@ -535,7 +535,7 @@ Samtec_QSS-048-xx-x-D-DP-A_P0.635mm_Vertical:
   <<: *QSS-048-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 60.0, y: 2.67}
+    - {drill: 1.02, space: 60.0, y: -2.67}
 
 ## Samtec_QSS-048-xx-x-D-DP-LC_P0.635mm_Vertical:
 ##   <<: *QSS-048-xx-x-D-DP
@@ -685,7 +685,7 @@ Samtec_QSE-020-xx-x-D-A_P0.8mm_Vertical:
   <<: *QSE-020-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 20.13, y: 2.67}
+    - {drill: 1.02, space: 20.13, y: -2.67}
 
 ## Samtec_QSE-020-xx-x-D-A-L_P0.8mm_Vertical:
 ##   <<: *QSE-020-xx-x-D
@@ -706,7 +706,7 @@ Samtec_QSE-040-xx-x-D-A_P0.8mm_Vertical:
   <<: *QSE-040-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 40.13, y: 2.67}
+    - {drill: 1.02, space: 40.13, y: -2.67}
 
 # QSE family; 3 banks
 Samtec_QSE-060-xx-x-D_P0.8mm_Vertical: &QSE-060-xx-x-D
@@ -719,7 +719,7 @@ Samtec_QSE-060-xx-x-D-A_P0.8mm_Vertical:
   <<: *QSE-060-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 60.13, y: 2.67}
+    - {drill: 1.02, space: 60.13, y: -2.67}
 
 # QSE family; 1 bank; differential
 Samtec_QSE-014-xx-x-D-DP_P0.8mm_Vertical: &QSE-014-xx-x-D-DP
@@ -737,7 +737,7 @@ Samtec_QSE-014-xx-x-D-DP-A_P0.8mm_Vertical:
   <<: *QSE-014-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 20.13, y: 2.67}
+    - {drill: 1.02, space: 20.13, y: -2.67}
 
 # QSE family; 2 banks; differential
 Samtec_QSE-028-xx-x-D-DP_P0.8mm_Vertical: &QSE-028-xx-x-D-DP
@@ -750,7 +750,7 @@ Samtec_QSE-028-xx-x-D-DP-A_P0.8mm_Vertical:
   <<: *QSE-028-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 40.13, y: 2.67}
+    - {drill: 1.02, space: 40.13, y: -2.67}
 
 # QSE family; 3 banks; differential
 Samtec_QSE-042-xx-x-D-DP_P0.8mm_Vertical: &QSE-042-xx-x-D-DP
@@ -763,4 +763,4 @@ Samtec_QSE-042-xx-x-D-DP-A_P0.8mm_Vertical:
   <<: *QSE-042-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 60.13, y: 2.67}
+    - {drill: 1.02, space: 60.13, y: -2.67}

From 5893c21b775640b3da71175353f02c1c94a9cffc Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Tue, 28 Jul 2020 19:51:39 -0700
Subject: [PATCH 36/62] Fix pin numbering error in QStrip_QPairs_Vertical
 script

---
 scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
index dac9cd89f..0bf214ad7 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
@@ -168,7 +168,6 @@ def generate_one_footprint(param, config, default_lib):
                       layers = Pad.LAYERS_SMT,
                       shape = Pad.SHAPE_RECT)
             fp.append(pad)
-            n += 1
 
     ############################################################################
     # Holes

From 4b63a72e294f1d94dc2ac44f2b997efa74de2566 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Wed, 29 Jul 2020 22:37:44 -0700
Subject: [PATCH 37/62] + Finish terminal mode in QStrip_QPairs_Horizontal +
 Minor cleanup in QStrip_QPairs_Vertical

---
 .../QStrip_QPairs_Horizontal.py               | 147 +++++++++++++-----
 .../QStrip_QPairs_Horizontal.yaml             |  36 ++---
 .../QStrip_QPairs_Vertical.py                 |  12 +-
 3 files changed, 127 insertions(+), 68 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.py b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.py
index a0d03a9bd..35e9dcf46 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.py
@@ -68,7 +68,7 @@
 import os
 import argparse
 from copy import deepcopy
-import math
+from math import *
 import yaml
 
 # Load parent path of KicadModTree
@@ -96,6 +96,7 @@ def generate_one_footprint(param, config, default_lib):
     
     # Signal pad parameters
     pad_pitch = param['pads']['signal']['pitch']
+    pad_rows = param['pads']['signal']['rows']
     pad_w = param['pads']['signal']['width']
     pad_h = param['pads']['signal']['height']
     pad_y = param['pads']['signal']['y']
@@ -108,16 +109,20 @@ def generate_one_footprint(param, config, default_lib):
     plane_y = param['pads']['plane']['y']
     plane_n = param['pads']['plane']['n']
 
-    # Pin 1 position
-    pin1 = Vector2D(0,0)
-    pin1.x = -(pad_n / 4)*pad_pitch + pad_pitch/2 - ((banks-1) / 2)*bank_x
+    # Terminal or Socket mode
+    mode = param['layout']['type'].capitalize()
     if mode == "Terminal":
-        pin1.y = -pad_y
+        x_inv = 1
     elif mode == "Socket":
-        pin1.y = pad_y
+        x_inv = -1
     else:
         raise ValueError("Connector type must be either 'Terminal' or 'Socket'")
     
+    # Pin 1 position
+    pin1 = Vector2D(0,0)
+    pin1.x = -(pad_n/4)*pad_pitch + pad_pitch/2 - ((banks-1) / 2)*bank_x
+    pin1.y = pad_y[0]
+    
     # Bank 1 center point
     bank1_mid = pin1.x - pad_pitch/2 + (pad_n / 4)*pad_pitch
 
@@ -128,9 +133,10 @@ def generate_one_footprint(param, config, default_lib):
         pin.append([])
         for slot in range(pad_n):
             # Compute next pad location
-            pos = {'x': pin1.x + (slot // 2)*pad_pitch + b*bank_x,
-                   'y': pin1.y - (slot  % 2)*(2*pin1.y),
-                   'n': n+1, 'slot': slot}
+            for r in range(pad_rows):
+                pos = {'x': pin1.x + (slot // pad_rows)*pad_pitch + b*bank_x,
+                       'y': pad_y[slot % 2],
+                       'n': n+1, 'slot': slot}
 
             # Skip slots for differential banks
             if b < param['banks']['diff']:
@@ -170,14 +176,14 @@ def generate_one_footprint(param, config, default_lib):
         for p in param['holes']:
             drill = p['drill']
             shape = Pad.SHAPE_CIRCLE if type(drill) is float else Pad.SHAPE_OVAL
-            h = [Pad(number = "MP" if 'pad' in p else "",
-                     at     = (m*p['space']/2, p['y']),
-                     drill  = drill,
-                     size   = p['pad'] if 'pad' in p else drill,
-                     type   = Pad.TYPE_THT if 'pad' in p else Pad.TYPE_NPTH,
-                     layers = Pad.LAYERS_THT if 'pad' in p else Pad.LAYERS_NPTH,
-                     shape  = shape) for m in (-1,1)]
-            fp.extend(h)
+            holes = [Pad(number = "MP" if 'pad' in p else "",
+                         at     = ((h/(p['n']-1) - 1/2)*p['space'], p['y']),
+                         drill  = drill,
+                         size   = p['pad'] if 'pad' in p else drill,
+                         type   = Pad.TYPE_THT if 'pad' in p else Pad.TYPE_NPTH,
+                         layers = Pad.LAYERS_THT if 'pad' in p else Pad.LAYERS_NPTH,
+                         shape  = shape) for h in range(p['n'])]
+            fp.extend(holes)
 
     ############################################################################
     # Fabrication layer: F.Fab
@@ -185,41 +191,95 @@ def generate_one_footprint(param, config, default_lib):
     fab_mark = config['fab_pin1_marker_length']
     fab_w = param['layout']['width'] if 'width' not in param else param['width']
     fab_h = param['layout']['height']
-    fab_y = fab_h / 2
-    lEdge = -fab_w / 2
-    rEdge = lEdge + fab_w
-    chamfer = fab_h / 4 # 1/4 connector height, cosmetic only
+    fab_y = param['layout']['y']
+    fab_edge = fab_w/2
 
     if param['layout']['type'] == "Terminal":
-        # Plug outline
-        plug_h = param['layout']['plug']['height']
-        fp.append(RectLine(start  = (-banks*bank_w/2, -fab_y),
-                           end    = ( banks*bank_w/2, -fab_y - plug_h),
-                           layer  = "F.CrtYd",
+        # Draw left and right outlines
+        fab_end = [[banks*bank_x/2, pin1.y],
+                   [banks*bank_x/2 + (fab_y-fab_h-pin1.y)/tan(radians(-60)), fab_y-fab_h],
+                   [fab_w/2, fab_y-fab_h],
+                   [fab_w/2, fab_y],
+                   [banks*bank_x/2, fab_y]]
+        fp.append(PolygoneLine(nodes = fab_end,
+                               layer = "F.Fab",
+                               width = fab_line))
+        fp.append(PolygoneLine(nodes = fab_end,
+                               layer = "F.Fab",
+                               width = fab_line,
+                               x_mirror = 0))
+        fp.append(Line(start = (-banks*bank_x/2, pin1.y),
+                       end   = ( banks*bank_x/2, pin1.y),
+                       layer = "F.Fab",
+                       width = fab_line))
+        # Terminal outline
+        fp.append(RectLine(start  = (-banks*bank_x/2, fab_y),
+                           end    = ( banks*bank_x/2, fab_y + bank_h),
+                           layer  = "F.Fab",
                            width  = fab_line))
-    
+
     ############################################################################
     # Silkscreen: F.SilkS
-    #silk_offset = param['layout']['silk-offset']
     silk_offset = config['silk_fab_offset']
     silk_pad = {'x': config['silk_pad_clearance'] + pad_w/2,
                 'y': config['silk_pad_clearance'] + pad_h/2}
     silk_line = config['silk_line_width']
-    silk_y = fab_y + silk_offset
-    silk_lEdge = lEdge - silk_offset
-    silk_rEdge = rEdge + silk_offset
-    silk_chamfer = chamfer + silk_offset/2
-    silk_pin1 = pin1.x - silk_pad['x']
+    silk_pad = {'x': config['silk_pad_clearance'] + pad_w/2,
+                'y': config['silk_pad_clearance'] + pad_h/2}
+
+    # Draw silkscreen end outlines
+    silk_end = fab_end.copy()
+    silk_end.pop()
+    silk_end_offset = [(-silk_offset, -silk_offset),
+                       (-silk_offset, -silk_offset),
+                       ( silk_offset, -silk_offset),
+                       ( silk_offset,  0)]
+    for a in range(len(silk_end)):
+        for b in range(2):
+            silk_end[a][b] += silk_end_offset[a][b]
+    
+    fp.append(PolygoneLine(nodes = silk_end,
+                           layer = "F.SilkS",
+                           width = silk_line))
+    fp.append(PolygoneLine(nodes = silk_end,
+                           layer = "F.SilkS",
+                           width = silk_line,
+                           x_mirror = 0))
+
+    # Extend end outlines to pins
+    fp.append(Line(start = (-banks*bank_x/2+silk_offset, pin1.y-silk_offset),
+                   end   = (pin[0][0]['x']-silk_pad['x'], pin1.y-silk_offset),
+                   layer = "F.SilkS",
+                   width = silk_line))
+    fp.append(Line(start = (banks*bank_x/2-silk_offset, pin1.y-silk_offset),
+                   end   = (pin[-1][-1]['x']+silk_pad['x'], pin1.y-silk_offset),
+                   layer = "F.SilkS",
+                   width = silk_line))
+
+    # Pin 1 indicator
+    fp.append(markerArrow(x = pin[0][0]['x'],
+                          y = pin[0][0]['y'] - silk_pad['y'],
+                          width = fab_mark / 2,
+                          line_width = silk_line,
+                          angle = 180,
+                          layer = "F.SilkS"))
 
+    # Draw outlines between banks
+    for b in range(banks-1):
+        fp.append(Line(start = (pin[b][-1]['x']  + x_inv*silk_pad['x'], pin1.y-silk_offset),
+                       end   = (pin[b+1][0]['x'] - x_inv*silk_pad['x'], pin1.y-silk_offset),
+                       layer = "F.SilkS",
+                       width = silk_line))
+    
     ############################################################################
     # PCB Edge: Dwgs.User
-    fp.append(Line(start = (lEdge, param['layout']['edge']),
-                   end   = (rEdge, param['layout']['edge']),
+    fp.append(Line(start = (-fab_edge, fab_y + param['layout']['edge']),
+                   end   = ( fab_edge, fab_y + param['layout']['edge']),
                    layer = "Dwgs.User",
                    width = fab_line))
     
     fp.append(Text(type = "user", text = "PCB Edge",
-                   at = (0, param['layout']['edge'] - 1.0),
+                   at = (bank1_mid, fab_y + param['layout']['edge'] - 1.0),
                    layer = "Dwgs.User"))
 
     ############################################################################
@@ -227,12 +287,13 @@ def generate_one_footprint(param, config, default_lib):
     court_line = config['courtyard_line_width']
     court_grid = config['courtyard_grid']
     court_offset = config['courtyard_offset']['connector']
-
+    
     court_x = roundToBase(fab_w/2 + court_offset, court_grid)
-    court_y = roundToBase(max(fab_y, pad_y + pad_h/2) + court_offset, court_grid)
-
-    fp.append(RectLine(start  = (-court_x, -court_y),
-                       end    = ( court_x,  court_y),
+    court_y = [roundToBase(fab_y - fab_h - court_offset, court_grid),
+               roundToBase(fab_y + bank_h + court_offset, court_grid)]
+    
+    fp.append(RectLine(start  = (-court_x, court_y[0]),
+                       end    = ( court_x, court_y[1]),
                        layer  = "F.CrtYd",
                        width  = court_line))
     
@@ -240,7 +301,7 @@ def generate_one_footprint(param, config, default_lib):
     # Set Metadata
     
     # Draw reference and value
-    text_y = court_y + 1.0
+    text_y = fab_y + 1.0
     fp.append(Text(type = 'reference', text = 'REF**',
                    at = (0, -text_y),
                    layer = "F.SilkS"))
@@ -248,7 +309,7 @@ def generate_one_footprint(param, config, default_lib):
                    at = (0, -text_y),
                    layer = "F.Fab"))
     fp.append(Text(type = 'value', text=param['name'],
-                   at = (0, text_y),
+                   at = (0, text_y + bank_h + court_offset),
                    layer="F.Fab"))
     
     # Set surface-mount attribute
diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.yaml b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.yaml
index de8f441f1..b7c0850af 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.yaml
@@ -8,34 +8,32 @@ Samtec_QTH-030-xx-x-D-RA_P0.5mm_Horizontal:
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf)
-  layout: {type: "Terminal", width: 25.72, height: 9.78, edge: -3.309, plug:
-    {width: 20.0, height: 3.05}}
-  banks: {n: 1, diff: 0, space: 20.0, width: 16.5, height: 4.0}
+  layout: {type: "Terminal", width: 25.72, height: 9.78, y: 3.81, edge: 0.38}
+  banks: {n: 1, diff: 0, space: 20.0, width: 16.5, height: 3.05}
   pads: &QTH-RA_pads
-    signal: {n: 60, pitch: 0.5, y: 2.3055, width: 0.305, height: 1.45}
-    plane: {n: 8, pitch: 2.032, y: 0, drill: 0.533, pad: 1.0}
+    signal: {n: 60, rows: 2, pitch: 0.5, y: [-3.277, 1.334], width: 0.305, height: 1.45}
+    plane: {n: 8, pitch: 2.032, y: -0.851, drill: 0.533, pad: 1.0}
   holes: # Holes sorted by dimension labels in Samtec ECN-264948 Rev. E
-    - {drill: 1.067, pad: 1.8, space: 23.178, y: -2.197} # "A"
-    - {drill: 1.448,           space: 21.908, y: 0.851}  # "B"
-    - {drill: 1.067, pad: 1.8, space: 18.190, y: 3.607}  # "C"
+    - {n: 2, drill: 1.067, pad: 1.8, space: 23.178, y: -2.54} # "A"
+    - {n: 2, drill: 1.448,           space: 21.908, y: 0}     # "B"
+    - {n: 2, drill: 1.067, pad: 1.8, space: 18.190, y: 3.048} # "C"
 
 Samtec_QTH-060-xx-x-D-RA_P0.5mm_Horizontal:
   meta: *QTH-RA_meta
   pads: *QTH-RA_pads
-  layout: {type: "Terminal", width: 45.72, height: 1.45, edge: -3.309, plug:
-    {width: 40.01, height: 3.05}}
-  banks: {n: 2, diff: 0, space: 20.0, width: 16.5, height: 4.0}
+  layout: {type: "Terminal", width: 45.72, height: 9.78, y: 3.81, edge: 0.38}
+  banks: {n: 2, diff: 0, space: 20.0, width: 16.5, height: 3.05}
   holes:
-    - {drill: 1.067, pad: 1.8, space: 43.180, y: -2.197} # "A"
-    - {drill: 1.448,           space: 41.910, y: 0.851}  # "B"
-    - {drill: 1.067, pad: 1.8, space: 38.913, y: 3.607}  # "C"
+    - {n: 2, drill: 1.067, pad: 1.8, space: 43.180, y: -2.54} # "A"
+    - {n: 2, drill: 1.448,           space: 41.910, y: 0}     # "B"
+    - {n: 3, drill: 1.067, pad: 1.8, space: 38.913, y: 3.048} # "C"
 
 Samtec_QTH-090-xx-x-D-RA_P0.5mm_Horizontal:
   meta: *QTH-RA_meta
   pads: *QTH-RA_pads
-  layout: {type: "Terminal", width: 65.72, height: 1.45, edge: -3.309, plug: {height: 3.05}}
-  banks: {n: 3, diff: 0, space: 20.0, width: 16.5, height: 4.0}
+  layout: {type: "Terminal", width: 65.72, height: 9.78, y: 3.81, edge: 0.38}
+  banks: {n: 3, diff: 0, space: 20.0, width: 16.5, height: 3.05}
   holes:
-    - {drill: 1.067, pad: 1.8, space: 63.183, y: -2.197} # "A"
-    - {drill: 1.448,           space: 61.913, y: 0.851}  # "B"
-    - {drill: 1.067, pad: 1.8, space: 58.915, y: 3.607}  # "C"
+    - {n: 2, drill: 1.067, pad: 1.8, space: 63.183, y: -2.54} # "A"
+    - {n: 2, drill: 1.448,           space: 61.913, y: 0}     # "B"
+    - {n: 4, drill: 1.067, pad: 1.8, space: 58.915, y: 3.048} # "C"
diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
index 0bf214ad7..e1d2e4eb9 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
@@ -195,15 +195,15 @@ def generate_one_footprint(param, config, default_lib):
     chamfer = fab_h / 4 # 1/4 connector height, cosmetic only
 
     if mode == 'Terminal':
-        # Left end outline
-        lEnd = [(-fab_edge, -fab_y),
-                (-fab_edge, fab_y-chamfer),
-                (-fab_edge+chamfer, fab_y)]
-        fp.append(PolygoneLine(nodes = lEnd,
+        # End outline
+        fab_end = [(-fab_edge, -fab_y),
+                   (-fab_edge, fab_y-chamfer),
+                   (-fab_edge+chamfer, fab_y)]
+        fp.append(PolygoneLine(nodes = fab_end,
                                layer = "F.Fab",
                                width = fab_line))
         # Right end outline (mirrors left end)
-        fp.append(PolygoneLine(nodes = lEnd,
+        fp.append(PolygoneLine(nodes = fab_end,
                                layer = "F.Fab",
                                width = fab_line,
                                x_mirror = 0))

From 5d5625dd3251dc6fb30232835eec18b05c948819 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Mon, 3 Aug 2020 22:09:05 -0700
Subject: [PATCH 38/62] + Clean up/restructure QStrip_QPairs scripts in
 preparation for   Basic Beam & Blade connector support + Continue work on
 QStrip_QPairs_Horizontal script

---
 .../QStrip_QPairs_Horizontal.py               |  57 +++----
 .../QStrip_QPairs_Horizontal.yaml             |  26 ++--
 .../QStrip_QPairs_Vertical.py                 |  57 ++++---
 .../QStrip_QPairs_Vertical.yaml               | 146 ++++++++++--------
 .../Connector_Samtec/RazorBeam_Vertical.py    |   2 +-
 5 files changed, 152 insertions(+), 136 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.py b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.py
index 35e9dcf46..e67554642 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.py
@@ -25,14 +25,15 @@
   meta: # Footprint metadata
     pn: 'part number' # [optional] overrides automatic part number detection
     description: 'Brief description of the footprint'
-    datasheet: 'URL(s) to footprint datasheet'
     tags: 'KiCad tags go here'
+    datasheet: 'URL(s) to footprint datasheet'
   add-tags: 'more tags' # [optional] extends the tag list
   layout: # General footprint layout/drawing data
     type: '(Terminal|Socket)' # sets Pin 1 position and drawing mode
     width: !!float mm # [cosmetic] overall width of the connector
     height: !!float mm # [cosmetic] overall height of the connector
-  width: !!float mm # [optional, cosmetic] overrides layout::width
+    y: !!float mm # [cosmetic] y-offset used to draw connector outline
+    edge: !!float mm # y-offset of PCB edge
   banks:
     n: !!uint # number of banks in the connector
     diff: !!uint # number of differential banks
@@ -41,21 +42,22 @@
     height: !!float mm # height of bank outline drawn on F.Fab
   pads:
     signal: # signal pin parameters
+      n: !!uint # Number of pin slots on a bank
+      rows: !!uint # Number of pin rows
       pitch: !!float mm
       width: !!float mm # Pad width
       height: !!float mm # Pad height
-      y: !!float mm # vertical offset
-    planes: # plane parameters
-      width:
-        - !!float mm # outer pins 
-        - !!float mm # inner pins
-      height: !!float mm # Ground pad heights
-      space: # Distance between ground pads within each bank
-        - !!float mm # outer pins
-        - !!float mm # inner pins
+      y: [!!float mm, ...] # y-offset for each pin row
+    plane: # plane parameters
+      n: !!uint # Number of holes for plane connection
+      pitch: !!float mm
+      y: !!float mm # y-offset of plane holes
+      drill: !!float mm # drill diameter
+      pad: !!float mm # pad diameter
   holes: # [optional] hole pair specifications, mirrored about y axis
     - # Hole spec. 1
       name: "" # [optional] name/number for plated holes
+      n: !!uint # number of holes to drill
       drill: !!float mm # drill diameter (a list produces an oval)
       pad: !!float mm # [optional] PTH pad diameter (a list produces an oval)
       space: !!float mm # distance between holes mirrored about the y-axis
@@ -173,16 +175,16 @@ def generate_one_footprint(param, config, default_lib):
     ############################################################################
     # Holes
     if 'holes' in param:
-        for p in param['holes']:
-            drill = p['drill']
+        for hole in param['holes']:
+            drill = hole['drill']
             shape = Pad.SHAPE_CIRCLE if type(drill) is float else Pad.SHAPE_OVAL
-            holes = [Pad(number = "MP" if 'pad' in p else "",
-                         at     = ((h/(p['n']-1) - 1/2)*p['space'], p['y']),
+            holes = [Pad(number = "MP" if 'pad' in hole else "",
+                         at     = ((h/(hole['n']-1) - 1/2)*hole['space'], hole['y']),
                          drill  = drill,
-                         size   = p['pad'] if 'pad' in p else drill,
-                         type   = Pad.TYPE_THT if 'pad' in p else Pad.TYPE_NPTH,
-                         layers = Pad.LAYERS_THT if 'pad' in p else Pad.LAYERS_NPTH,
-                         shape  = shape) for h in range(p['n'])]
+                         size   = hole['pad'] if 'pad' in hole else drill,
+                         type   = Pad.TYPE_THT if 'pad' in hole else Pad.TYPE_NPTH,
+                         layers = Pad.LAYERS_THT if 'pad' in hole else Pad.LAYERS_NPTH,
+                         shape  = shape) for h in range(hole['n'])]
             fp.extend(holes)
 
     ############################################################################
@@ -196,8 +198,9 @@ def generate_one_footprint(param, config, default_lib):
 
     if param['layout']['type'] == "Terminal":
         # Draw left and right outlines
+        # Angle measured from 3D model of QTH-060-01-L-D-RA
         fab_end = [[banks*bank_x/2, pin1.y],
-                   [banks*bank_x/2 + (fab_y-fab_h-pin1.y)/tan(radians(-60)), fab_y-fab_h],
+                   [banks*bank_x/2 + (fab_y-fab_h-pin1.y)/tan(-1.112), fab_y-fab_h],
                    [fab_w/2, fab_y-fab_h],
                    [fab_w/2, fab_y],
                    [banks*bank_x/2, fab_y]]
@@ -279,7 +282,7 @@ def generate_one_footprint(param, config, default_lib):
                    width = fab_line))
     
     fp.append(Text(type = "user", text = "PCB Edge",
-                   at = (bank1_mid, fab_y + param['layout']['edge'] - 1.0),
+                   at = (0, fab_y + param['layout']['edge'] + 1.0),
                    layer = "Dwgs.User"))
 
     ############################################################################
@@ -288,12 +291,12 @@ def generate_one_footprint(param, config, default_lib):
     court_grid = config['courtyard_grid']
     court_offset = config['courtyard_offset']['connector']
     
-    court_x = roundToBase(fab_w/2 + court_offset, court_grid)
-    court_y = [roundToBase(fab_y - fab_h - court_offset, court_grid),
-               roundToBase(fab_y + bank_h + court_offset, court_grid)]
+    court = {'x': roundToBase(fab_w/2 + court_offset, court_grid),
+             'y': [roundToBase(fab_y -  fab_h - court_offset, court_grid),
+                   roundToBase(fab_y + bank_h + court_offset, court_grid)]}
     
-    fp.append(RectLine(start  = (-court_x, court_y[0]),
-                       end    = ( court_x, court_y[1]),
+    fp.append(RectLine(start  = (-court['x'], court['y'][0]),
+                       end    = ( court['x'], court['y'][1]),
                        layer  = "F.CrtYd",
                        width  = court_line))
     
@@ -365,7 +368,7 @@ def generate_one_footprint(param, config, default_lib):
                         default='../conn_config_KLCv3.yaml',
                         help='Series KLC configuration YAML file')
     parser.add_argument('--library', type=str, nargs='?',
-                        default='Connector_Samtec_QStrip_QPairs',
+                        default='Connector_Samtec_QSeries',
                         help='Default KiCad library name (without extension)')
     parser.add_argument('files', metavar='file', type=str, nargs='*',
                         help='YAML file(s) containing footprint parameters')
diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.yaml b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.yaml
index b7c0850af..b9f09f081 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.yaml
@@ -4,36 +4,36 @@ Samtec_QTH-030-xx-x-D-RA_P0.5mm_Horizontal:
     description: >-
       Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip;
       {banks:d} bank(s), {pins:d} pins/bank; {ds:s}
-    tags: "connector Samtec Q-Strip QTH mezzanine terminal horizontal single-ended"
+    tags: "connector Samtec QStrip QTH mezzanine terminal horizontal single-ended"
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf)
-  layout: {type: "Terminal", width: 25.72, height: 9.78, y: 3.81, edge: 0.38}
+  layout: {type: "Terminal", width: 25.72, height: 9.78, y: 3.8, edge: 0.38}
   banks: {n: 1, diff: 0, space: 20.0, width: 16.5, height: 3.05}
   pads: &QTH-RA_pads
     signal: {n: 60, rows: 2, pitch: 0.5, y: [-3.277, 1.334], width: 0.305, height: 1.45}
     plane: {n: 8, pitch: 2.032, y: -0.851, drill: 0.533, pad: 1.0}
   holes: # Holes sorted by dimension labels in Samtec ECN-264948 Rev. E
-    - {n: 2, drill: 1.067, pad: 1.8, space: 23.178, y: -2.54} # "A"
-    - {n: 2, drill: 1.448,           space: 21.908, y: 0}     # "B"
-    - {n: 2, drill: 1.067, pad: 1.8, space: 18.190, y: 3.048} # "C"
+    - {n: 2, drill: 1.067, pad: 1.8, space: 23.178, y: -3.048} # "A"
+    - {n: 2, drill: 1.448,           space: 21.908, y:  0}     # "B"
+    - {n: 2, drill: 1.067, pad: 1.8, space: 18.190, y:  2.54}  # "C"
 
 Samtec_QTH-060-xx-x-D-RA_P0.5mm_Horizontal:
   meta: *QTH-RA_meta
   pads: *QTH-RA_pads
-  layout: {type: "Terminal", width: 45.72, height: 9.78, y: 3.81, edge: 0.38}
+  layout: {type: "Terminal", width: 45.72, height: 9.78, y: 3.8, edge: 0.38}
   banks: {n: 2, diff: 0, space: 20.0, width: 16.5, height: 3.05}
   holes:
-    - {n: 2, drill: 1.067, pad: 1.8, space: 43.180, y: -2.54} # "A"
-    - {n: 2, drill: 1.448,           space: 41.910, y: 0}     # "B"
-    - {n: 3, drill: 1.067, pad: 1.8, space: 38.913, y: 3.048} # "C"
+    - {n: 2, drill: 1.067, pad: 1.8, space: 43.180, y: -3.048} # "A"
+    - {n: 2, drill: 1.448,           space: 41.910, y:  0}     # "B"
+    - {n: 3, drill: 1.067, pad: 1.8, space: 38.913, y:  2.54}  # "C"
 
 Samtec_QTH-090-xx-x-D-RA_P0.5mm_Horizontal:
   meta: *QTH-RA_meta
   pads: *QTH-RA_pads
-  layout: {type: "Terminal", width: 65.72, height: 9.78, y: 3.81, edge: 0.38}
+  layout: {type: "Terminal", width: 65.72, height: 9.78, y: 3.8, edge: 0.38}
   banks: {n: 3, diff: 0, space: 20.0, width: 16.5, height: 3.05}
   holes:
-    - {n: 2, drill: 1.067, pad: 1.8, space: 63.183, y: -2.54} # "A"
-    - {n: 2, drill: 1.448,           space: 61.913, y: 0}     # "B"
-    - {n: 4, drill: 1.067, pad: 1.8, space: 58.915, y: 3.048} # "C"
+    - {n: 2, drill: 1.067, pad: 1.8, space: 63.183, y: -3.048} # "A"
+    - {n: 2, drill: 1.448,           space: 61.913, y:  0}     # "B"
+    - {n: 4, drill: 1.067, pad: 1.8, space: 58.915, y:  2.54}  # "C"
diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
index e1d2e4eb9..9e0d2f8a1 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
@@ -91,14 +91,12 @@ def generate_one_footprint(param, config, default_lib):
         x_inv = -1
     else:
         raise ValueError("Connector type must be either 'Terminal' or 'Socket'")
-
     
     # Bank parameters
     banks  = param['banks']['n']
     bank_x = param['banks']['space']
     bank_w = param['banks']['width']
     bank_h = param['banks']['height']
-    bank_slots = param['banks']['slots']
 
     ############################################################################
     # Copper layer(s)
@@ -108,21 +106,22 @@ def generate_one_footprint(param, config, default_lib):
     pad_w = param['pads']['signal']['width']
     pad_h = param['pads']['signal']['height']
     pad_y = param['pads']['signal']['y']
+    pad_n = param['pads']['signal']['n']
 
     # Pin 1 position
     pin1 = Vector2D(0,0)
-    pin1.x = -(bank_slots / 4)*pitch + pitch/2 - ((banks-1) / 2)*bank_x
+    pin1.x = -(pad_n / 4)*pitch + pitch/2 - ((banks-1) / 2)*bank_x
     pin1.y = -pad_y
     
     # Bank 1 center point
-    bank1_mid = x_inv * (pin1.x - pitch/2 + (bank_slots / 4)*pitch)
+    bank1_mid = x_inv * (pin1.x - pitch/2 + (pad_n / 4)*pitch)
 
     # Ground pad parameters
-    gnd_h = param['pads']['planes']['height']
+    #gnd_h = param['pads']['planes']['height']
     # Combine spacing and width data into a zipped list: [(space,width), ...]
-    gnd_sw = [sw for sw in zip(param['pads']['planes']['space'],
-                               param['pads']['planes']['width'])]
-    gnd_sw.sort() # Sort from lowest (inner) to highest (outer) spacing
+    #gnd_sw = [sw for sw in zip(param['pads']['planes']['space'],
+    #                           param['pads']['planes']['width'])]
+    #gnd_sw.sort() # Sort from lowest (inner) to highest (outer) spacing
 
     # Place pads
     n = 1 # Pin counter
@@ -130,7 +129,7 @@ def generate_one_footprint(param, config, default_lib):
     for b in range(banks):
         pin.append([])
         # Place signal pads
-        for slot in range(bank_slots):
+        for slot in range(pad_n):
             # Compute next pad location
             pos = {'x': x_inv * (pin1.x + (slot // 2)*pitch + b*bank_x),
                    'y': pin1.y - (slot  % 2)*(2*pin1.y),
@@ -141,7 +140,7 @@ def generate_one_footprint(param, config, default_lib):
                 if ((slot+1) % 6 == 0 or # Skip every 3rd odd slot
                     (slot+2) % 6 == 0 or # Skip every 3rd even slot
                     # Only add end-of-bank pins if they are completing a pair
-                    (slot+2 >= bank_slots and
+                    (slot+2 >= pad_n and
                      pin[b][-2]['slot'] != slot-2)):
                     continue
 
@@ -159,28 +158,28 @@ def generate_one_footprint(param, config, default_lib):
     
         # Place plane pads
         mid = bank1_mid + x_inv*b*bank_x # Bank midpoint
-        # Iterate through space/width list to generate ground pads...
-        for (space, width) in [(-s,w) for s,w in reversed(gnd_sw)] + gnd_sw:
-            pad = Pad(number = "P" + str(b+1),
-                      at = (mid + space/2, 0),
-                      size = (width, gnd_h),
-                      type = Pad.TYPE_SMT,
-                      layers = Pad.LAYERS_SMT,
-                      shape = Pad.SHAPE_RECT)
-            fp.append(pad)
+        if 'planes' in param['pads']:
+            for plane in param['pads']['planes']:
+                pad = [Pad(number = "P" + str(b+1),
+                           at = ((x - (plane['n']-1)/2)*plane['pitch'] + mid, plane['y']),
+                           size = (plane['width'], plane['height']),
+                           type = Pad.TYPE_SMT,
+                           layers = Pad.LAYERS_SMT,
+                           shape = Pad.SHAPE_RECT) for x in range(plane['n'])]
+                fp.extend(pad)
 
     ############################################################################
     # Holes
     if 'holes' in param:
-        for p in param['holes']:
-            drill = p['drill']
+        for hole in param['holes']:
+            drill = hole['drill']
             shape = Pad.SHAPE_CIRCLE if type(drill) is float else Pad.SHAPE_OVAL
-            h = [Pad(number = "MP" if 'pad' in p else "",
-                     at     = (m*p['space']/2, p['y']),
+            h = [Pad(number = "MP" if 'pad' in hole else "",
+                     at     = (m*hole['space']/2, hole['y']),
                      drill  = drill,
-                     size   = p['pad'] if 'pad' in p else drill,
-                     type   = Pad.TYPE_THT if 'pad' in p else Pad.TYPE_NPTH,
-                     layers = Pad.LAYERS_THT if 'pad' in p else Pad.LAYERS_NPTH,
+                     size   = hole['pad'] if 'pad' in hole else drill,
+                     type   = Pad.TYPE_THT if 'pad' in hole else Pad.TYPE_NPTH,
+                     layers = Pad.LAYERS_THT if 'pad' in hole else Pad.LAYERS_NPTH,
                      shape  = shape) for m in (-1,1)]
             fp.extend(h)
 
@@ -345,9 +344,9 @@ def generate_one_footprint(param, config, default_lib):
     # Pins or pairs/bank
     if param['banks']['diff'] == banks:
         # Differential mode: round up to nearest even number of pairs
-        pins_or_pairs = (bank_slots // 3) + (bank_slots // 3) % 2
+        pins_or_pairs = (pad_n // 3) + (pad_n // 3) % 2
     else:
-        pins_or_pairs = bank_slots
+        pins_or_pairs = pad_n
 
     # Description
     desc = param['meta']['description']
@@ -389,7 +388,7 @@ def generate_one_footprint(param, config, default_lib):
                         default='../conn_config_KLCv3.yaml',
                         help='Series KLC configuration YAML file')
     parser.add_argument('--library', type=str, nargs='?',
-                        default='Connector_Samtec_QStrip_QPairs',
+                        default='Connector_Samtec_QSeries',
                         help='Default KiCad library name (without extension)')
     parser.add_argument('files', metavar='file', type=str, nargs='*',
                         help='YAML file(s) containing footprint parameters')
diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
index 8e141ca04..744827c3f 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
@@ -18,15 +18,17 @@ Samtec_QTH-030-xx-x-D_P0.5mm_Vertical: &QTH-030-xx-x-D
     description: &QStrip_desc >-
       Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip;
       {banks:d} bank(s), {pins:d} pins/bank; {ds:s}
-    tags: 'connector Samtec Q-Strip QTH mezzanine terminal vertical single-ended'
+    tags: 'connector Samtec QStrip QTH mezzanine terminal vertical single-ended'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 0, slots: 60, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 1, diff: 0, space: 20.0, width: 16.5, height: 4.0}
   pads: &QTH_pads
-    signal: {pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
-    planes: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
+    signal: {n: 60, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
+    planes: #{height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
+      - {n: 2, pitch: 16.89, y: 0, width: 2.54, height: 0.64}
+      - {n: 2, pitch:  6.35, y: 0, width: 4.7,  height: 0.64}
 
 Samtec_QTH-030-xx-x-D-A_P0.5mm_Vertical:
   <<: *QTH-030-xx-x-D
@@ -53,7 +55,7 @@ Samtec_QTH-030-xx-x-D-A_P0.5mm_Vertical:
 Samtec_QTH-060-xx-x-D_P0.5mm_Vertical: &QTH-060-xx-x-D
   meta: *QTH_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 0, slots: 60, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 2, diff: 0, space: 20.0, width: 16.5, height: 4.0}
   pads: *QTH_pads
 
 Samtec_QTH-060-xx-x-D-A_P0.5mm_Vertical:
@@ -81,7 +83,7 @@ Samtec_QTH-060-xx-x-D-A_P0.5mm_Vertical:
 Samtec_QTH-090-xx-x-D_P0.5mm_Vertical: &QTH-090-xx-x-D
   meta: *QTH_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 0, slots: 60, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 3, diff: 0, space: 20.0, width: 16.5, height: 4.0}
   pads: *QTH_pads
 
 Samtec_QTH-090-xx-x-D-A_P0.5mm_Vertical:
@@ -96,12 +98,12 @@ Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical: &QTH-020-xx-x-D-DP
     description: &QPairs_desc >-
       Samtec {pn:s} {pitch:1.2f}mm Q Pairs High-Speed Ground Plane {type:s} Strip,
       Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank; {ds:s}
-    tags: 'connector Samtec Q-Pairs QTH mezzanine terminal vertical differential'
+    tags: 'connector Samtec QPairs QTH mezzanine terminal vertical differential'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 1, slots: 60, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 1, diff: 1, space: 20.0, width: 16.5, height: 4.0}
   pads: *QTH_pads
 
 Samtec_QTH-020-xx-x-D-DP-A_P0.5mm_Vertical:
@@ -129,7 +131,7 @@ Samtec_QTH-020-xx-x-D-DP-A_P0.5mm_Vertical:
 Samtec_QTH-040-xx-x-D-DP_P0.5mm_Vertical: &QTH-040-xx-x-D-DP
   meta: *QTH-DP_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 2, slots: 60, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 2, diff: 2, space: 20.0, width: 16.5, height: 4.0}
   pads: *QTH_pads
 
 Samtec_QTH-040-xx-x-D-DP-A_P0.5mm_Vertical:
@@ -157,7 +159,7 @@ Samtec_QTH-040-xx-x-D-DP-A_P0.5mm_Vertical:
 Samtec_QTH-060-xx-x-D-DP_P0.5mm_Vertical: &QTH-060-xx-x-D-DP
   meta: *QTH-DP_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 3, slots: 60, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 3, diff: 3, space: 20.0, width: 16.5, height: 4.0}
   pads: *QTH_pads
 
 Samtec_QTH-060-xx-x-D-DP-A_P0.5mm_Vertical:
@@ -173,13 +175,13 @@ Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical:
     pn: 'ASP-122952-01'
     datasheet: '[drawing/footprint](http://suddendocs.samtec.com/prints/asp-122952-01-mkt.pdf)'
     tags: >-
-      connector Samtec Q-Strip QPairs HSMC card terminal mezzanine vertical
-      single-ended differential alignment-pins application-specific'
+      connector Samtec QSeries QStrip QPairs HSMC card terminal mezzanine
+      vertical single-ended differential alignment-pins application-specific
     description: >-
       Samtec {pn:s} HSMC Card {type:s}; modified QTH-090-01-L-D-A,
       Bank 1 differential; {ds:s}
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 1, slots: 60, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 3, diff: 1, space: 20.0, width: 16.5, height: 4.0}
   pads: *QTH_pads
   holes:
     - {drill: 1.02, space: 58.48, y: -2.03}
@@ -189,15 +191,18 @@ Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical:
 Samtec_QSH-030-xx-x-D_P0.5mm_Vertical: &QSH-030-xx-x-D
   meta: &QSH_meta
     description: *QStrip_desc
-    tags: 'connector Samtec Q-Strip QSH mezzanine socket vertical single-ended'
+    tags: 'connector Samtec QStrip QSH mezzanine socket vertical single-ended'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.31, height: 7.24}
-  banks: {n: 1, diff: 0, slots: 60, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 1, diff: 0, space: 20.0, width: 16.0, height: 3.8}
   pads: &QSH_pads
-    signal: {pitch: 0.5, y: 2.67, width: 0.279, height: 2.27}
-    planes: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
+    signal: {n: 60, pitch: 0.5, y: 2.67, width: 0.279, height: 2.27}
+    planes: #{height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
+      - {n: 2, pitch: 16.13, y: 0, width: 2.54, height: 0.43}
+      - {n: 2, pitch:  6.35, y: 0, width: 4.7,  height: 0.43}
+
 
 Samtec_QSH-030-xx-x-D-A_P0.5mm_Vertical:
   <<: *QSH-030-xx-x-D
@@ -215,7 +220,7 @@ Samtec_QSH-030-xx-x-D-A_P0.5mm_Vertical:
 Samtec_QSH-060-xx-x-D_P0.5mm_Vertical: &QSH-060-xx-x-D
   meta: *QSH_meta
   layout: {type: 'Socket', width: 41.31, height: 7.24}
-  banks: {n: 2, diff: 0, slots: 60, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 2, diff: 0, space: 20.0, width: 16.0, height: 3.8}
   pads: *QSH_pads
 
 Samtec_QSH-060-xx-x-D-A_P0.5mm_Vertical:
@@ -234,7 +239,7 @@ Samtec_QSH-060-xx-x-D-A_P0.5mm_Vertical:
 Samtec_QSH-090-xx-x-D_P0.5mm_Vertical: &QSH-090-xx-x-D
   meta: *QSH_meta
   layout: {type: 'Socket', width: 61.38, height: 7.24}
-  banks: {n: 3, diff: 0, slots: 60, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 3, diff: 0, space: 20.0, width: 16.0, height: 3.8}
   pads: *QSH_pads
 
 Samtec_QSH-090-xx-x-D-A_P0.5mm_Vertical:
@@ -253,12 +258,12 @@ Samtec_QSH-090-xx-x-D-A_P0.5mm_Vertical:
 Samtec_QSH-020-xx-x-D-DP_P0.5mm_Vertical: &QSH-020-xx-x-D-DP
   meta: &QSH-DP_meta
     description: *QPairs_desc
-    tags: 'connector Samtec Q-Pairs QSH mezzanine socket vertical differential'
+    tags: 'connector Samtec QPairs QSH mezzanine socket vertical differential'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-dp-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.31, height: 7.24}
-  banks: {n: 1, diff: 1, slots: 60, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 1, diff: 1, space: 20.0, width: 16.0, height: 3.8}
   pads: *QSH_pads
 
 Samtec_QSH-020-xx-x-D-DP-A_P0.5mm_Vertical:
@@ -277,7 +282,7 @@ Samtec_QSH-020-xx-x-D-DP-A_P0.5mm_Vertical:
 Samtec_QSH-040-xx-x-D-DP_P0.5mm_Vertical: &QSH-040-xx-x-D-DP
   meta: *QSH-DP_meta
   layout: {type: 'Socket', width: 41.31, height: 7.24}
-  banks: {n: 2, diff: 2, slots: 60, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 2, diff: 2, space: 20.0, width: 16.0, height: 3.8}
   pads: *QSH_pads
 
 Samtec_QSH-040-xx-x-D-DP-A_P0.5mm_Vertical:
@@ -294,7 +299,7 @@ Samtec_QSH-040-xx-x-D-DP-A_P0.5mm_Vertical:
 Samtec_QSH-060-xx-x-D-DP_P0.5mm_Vertical: &QSH-060-xx-x-D-DP
   meta: *QSH-DP_meta
   layout: {type: 'Socket', width: 61.38, height: 7.24}
-  banks: {n: 3, diff: 3, slots: 60, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 3, diff: 3, space: 20.0, width: 16.0, height: 3.8}
   pads: *QSH_pads
 
 Samtec_QSH-060-xx-x-D-DP-A_P0.5mm_Vertical:
@@ -314,13 +319,13 @@ Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
     pn: 'ASP-122953-01'
     datasheet: '[drawing/footprint](http://suddendocs.samtec.com/prints/asp-122953-01-mkt.pdf)'
     tags: >-
-      connector Samtec Q-Strip QPairs HSMC host socket mezzanine vertical
-      single-ended differential application-specific
+      connector Samtec QSeries QStrip QPairs HSMC host socket mezzanine
+      vertical single-ended differential application-specific
     description: >-
       Samtec {pn:s} HSMC Host {type:s}; modified QSH-090-01-L-D-A,
       Bank 1 differential; {ds:s}
   layout: {type: 'Socket', width: 61.38, height: 7.24}
-  banks: {n: 3, diff: 1, slots: 60, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 3, diff: 1, space: 20.0, width: 16.0, height: 3.8}
   pads: *QSH_pads
   holes:
     - {drill: 1.02, space: 60.13, y: -2.03}
@@ -330,15 +335,17 @@ Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
 Samtec_QTS-025-xx-x-D_P0.635mm_Vertical: &QTS-025-xx-x-D
   meta: &QTS_meta
     description: *QStrip_desc
-    tags: 'connector Samtec Q-Strip QTS mezzanine terminal vertical'
+    tags: 'connector Samtec QStrip QTS mezzanine terminal vertical'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qts-xxx-xx-x-d-xx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 0, slots: 50, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 1, diff: 0, space: 20.0, width: 16.5, height: 4.0}
   pads: &QTS_pads
-    signal: {pitch: 0.635, y: 3.086, width: 0.406, height: 1.45}
-    planes: {height: 0.635, width: [2.54, 4.7], space: [16.89, 6.35]}
+    signal: {n: 50, pitch: 0.635, y: 3.086, width: 0.406, height: 1.45}
+    planes: #{height: 0.635, width: [2.54, 4.7], space: [16.89, 6.35]}
+      - {n: 2, pitch: 16.89, y: 0, width: 2.54, height: 0.635}
+      - {n: 2, pitch:  6.35, y: 0, width: 4.7,  height: 0.635}
 
 Samtec_QTS-025-xx-x-D-A_P0.635mm_Vertical:
   <<: *QTS-025-xx-x-D
@@ -350,7 +357,7 @@ Samtec_QTS-025-xx-x-D-A_P0.635mm_Vertical:
 Samtec_QTS-050-xx-x-D_P0.635mm_Vertical: &QTS-050-xx-x-D
   meta: *QTS_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 0, slots: 50, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 2, diff: 0, space: 20.0, width: 16.5, height: 4.0}
   pads: *QTS_pads
 
 Samtec_QTS-050-xx-x-D-A_P0.635mm_Vertical:
@@ -363,7 +370,7 @@ Samtec_QTS-050-xx-x-D-A_P0.635mm_Vertical:
 Samtec_QTS-075-xx-x-D_P0.635mm_Vertical: &QTS-075-xx-x-D
   meta: *QTS_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 0, slots: 50, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 3, diff: 0, space: 20.0, width: 16.5, height: 4.0}
   pads: *QTS_pads
 
 Samtec_QTS-075-xx-x-D-A_P0.635mm_Vertical:
@@ -376,12 +383,12 @@ Samtec_QTS-075-xx-x-D-A_P0.635mm_Vertical:
 Samtec_QTS-016-xx-x-D-DP_P0.635mm_Vertical: &QTS-016-xx-x-D-DP
   meta: &QTS-DP_meta
     description: *QPairs_desc
-    tags: 'connector Samtec Q-Pairs QTS mezzanine terminal vertical differential'
+    tags: 'connector Samtec QPairs QTS mezzanine terminal vertical differential'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-dp-xx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qts-xxx-xx-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 1, slots: 50, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 1, diff: 1, space: 20.0, width: 16.5, height: 4.0}
   pads: *QTS_pads
 
 Samtec_QTS-016-xx-x-D-DP-A_P0.635mm_Vertical:
@@ -400,7 +407,7 @@ Samtec_QTS-016-xx-x-D-DP-A_P0.635mm_Vertical:
 Samtec_QTS-032-xx-x-D-DP_P0.635mm_Vertical: &QTS-032-xx-x-D-DP
   meta: *QTS-DP_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 2, slots: 50, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 2, diff: 2, space: 20.0, width: 16.5, height: 4.0}
   pads: *QTS_pads
 
 Samtec_QTS-032-xx-x-D-DP-A_P0.635mm_Vertical:
@@ -419,7 +426,7 @@ Samtec_QTS-032-xx-x-D-DP-A_P0.635mm_Vertical:
 Samtec_QTS-048-xx-x-D-DP_P0.635mm_Vertical: &QTS-048-xx-x-D-DP
   meta: *QTS-DP_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 3, slots: 50, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 3, diff: 3, space: 20.0, width: 16.5, height: 4.0}
   pads: *QTS_pads
 
 Samtec_QTS-048-xx-x-D-DP-A_P0.635mm_Vertical:
@@ -439,15 +446,17 @@ Samtec_QTS-048-xx-x-D-DP-A_P0.635mm_Vertical:
 Samtec_QSS-025-xx-x-D_P0.635mm_Vertical: &QSS-025-xx-x-D
   meta: &QSS_meta
     description: *QStrip_desc
-    tags: 'connector Samtec Q-Strip QSS mezzanine socket vertical single-ended'
+    tags: 'connector Samtec QStrip QSS mezzanine socket vertical single-ended'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qss-xxx-xx-xxx-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qss-xxx-xx-x-d-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.27, height: 7.24}
-  banks: {n: 1, diff: 0, slots: 50, space: 20.0, width: 16.0, height: 3.66}
+  banks: {n: 1, diff: 0, space: 20.0, width: 16.0, height: 3.66}
   pads: &QSS_pads
-    signal: {pitch: 0.635, y: 2.865, width: 0.406, height: 2.273}
-    planes: {height: 0.432, width: [2.8, 4.7], space: [16.13, 6.35]}
+    signal: {n: 50, pitch: 0.635, y: 2.865, width: 0.406, height: 2.273}
+    planes: #{height: 0.432, width: [2.8, 4.7], space: [16.13, 6.35]}
+      - {n: 2, pitch: 16.13, y: 0, width: 2.8, height: 0.432}
+      - {n: 2, pitch:  6.35, y: 0, width: 4.7, height: 0.432}
 
 Samtec_QSS-025-xx-x-D-A_P0.635mm_Vertical:
   <<: *QSS-025-xx-x-D
@@ -459,7 +468,7 @@ Samtec_QSS-025-xx-x-D-A_P0.635mm_Vertical:
 Samtec_QSS-050-xx-x-D_P0.635mm_Vertical: &QSS-050-xx-x-D
   meta: *QSS_meta
   layout: {type: 'Socket', width: 41.28, height: 7.24}
-  banks: {n: 2, diff: 0, slots: 50, space: 20.0, width: 16.0, height: 3.66}
+  banks: {n: 2, diff: 0, space: 20.0, width: 16.0, height: 3.66}
   pads: *QSS_pads
 
 Samtec_QSS-050-xx-x-D-A_P0.635mm_Vertical:
@@ -472,7 +481,7 @@ Samtec_QSS-050-xx-x-D-A_P0.635mm_Vertical:
 Samtec_QSS-075-xx-x-D_P0.635mm_Vertical: &QSS-075-xx-x-D
   meta: *QSS_meta
   layout: {type: 'Socket', width: 61.28, height: 7.24}
-  banks: {n: 3, diff: 0, slots: 50, space: 20.0, width: 16.0, height: 3.66}
+  banks: {n: 3, diff: 0, space: 20.0, width: 16.0, height: 3.66}
   pads: *QSS_pads
 
 Samtec_QSS-075-xx-x-D-A_P0.635mm_Vertical:
@@ -485,12 +494,12 @@ Samtec_QSS-075-xx-x-D-A_P0.635mm_Vertical:
 Samtec_QSS-016-xx-x-D-DP_P0.635mm_Vertical: &QSS-016-xx-x-D-DP
   meta: &QSS-DP_meta
     description: *QPairs_desc
-    tags: 'connector Samtec Q-Pairs QSS mezzanine socket vertical differential'
+    tags: 'connector Samtec QPairs QSS mezzanine socket vertical differential'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qss-xxx-xx-xxx-d-dp-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qss-xxx-xx-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.27, height: 7.24}
-  banks: {n: 1, diff: 1, slots: 50, space: 20.0, width: 16.0, height: 3.66}
+  banks: {n: 1, diff: 1, space: 20.0, width: 16.0, height: 3.66}
   pads: *QSS_pads
 
 Samtec_QSS-016-xx-x-D-DP-A_P0.635mm_Vertical:
@@ -509,7 +518,7 @@ Samtec_QSS-016-xx-x-D-DP-A_P0.635mm_Vertical:
 Samtec_QSS-032-xx-x-D-DP_P0.635mm_Vertical: &QSS-032-xx-x-D-DP
   meta: *QSS-DP_meta
   layout: {type: 'Socket', width: 41.28, height: 7.24}
-  banks: {n: 2, diff: 2, slots: 50, space: 20.0, width: 16.0, height: 3.66}
+  banks: {n: 2, diff: 2, space: 20.0, width: 16.0, height: 3.66}
   pads: *QSS_pads
 
 Samtec_QSS-032-xx-x-D-DP-A_P0.635mm_Vertical:
@@ -528,7 +537,7 @@ Samtec_QSS-032-xx-x-D-DP-A_P0.635mm_Vertical:
 Samtec_QSS-048-xx-x-D-DP_P0.635mm_Vertical: &QSS-048-xx-x-D-DP
   meta: *QSS-DP_meta
   layout: {type: 'Socket', width: 61.28, height: 7.24}
-  banks: {n: 3, diff: 3, slots: 50, space: 20.0, width: 16.0, height: 3.66}
+  banks: {n: 3, diff: 3, space: 20.0, width: 16.0, height: 3.66}
   pads: *QSS_pads
 
 Samtec_QSS-048-xx-x-D-DP-A_P0.635mm_Vertical:
@@ -548,15 +557,17 @@ Samtec_QSS-048-xx-x-D-DP-A_P0.635mm_Vertical:
 Samtec_QTE-020-xx-x-D_P0.8mm_Vertical: &QTE-020-xx-x-D
   meta: &QTE_meta
     description: *QStrip_desc
-    tags: 'connector Samtec Q-Strip QTE mezzanine terminal vertical'
+    tags: 'connector Samtec QStrip QTE mezzanine terminal vertical'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-xxx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 0, slots: 40, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 1, diff: 0, space: 20.0, width: 16.5, height: 4.0}
   pads: &QTE_pads
-    signal: {pitch: 0.8, y: 2.98, width: 0.46, height: 1.94}
-    planes: {height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
+    signal: {n: 40, pitch: 0.8, y: 2.98, width: 0.46, height: 1.94}
+    planes: #{height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
+      - {n: 2, pitch: 16.89, y: 0, width: 2.54, height: 0.64}
+      - {n: 2, pitch:  6.35, y: 0, width: 4.7,  height: 0.64}
 
 Samtec_QTE-020-xx-x-D-A_P0.8mm_Vertical:
   <<: *QTE-020-xx-x-D
@@ -576,7 +587,7 @@ Samtec_QTE-020-xx-x-D-A_P0.8mm_Vertical:
 Samtec_QTE-040-xx-x-D_P0.8mm_Vertical: &QTE-040-xx-x-D
   meta: *QTE_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 0, slots: 40, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 2, diff: 0, space: 20.0, width: 16.5, height: 4.0}
   pads: *QTE_pads
 
 Samtec_QTE-040-xx-x-D-A_P0.8mm_Vertical:
@@ -597,7 +608,7 @@ Samtec_QTE-040-xx-x-D-A_P0.8mm_Vertical:
 Samtec_QTE-060-xx-x-D_P0.8mm_Vertical: &QTE-060-xx-x-D
   meta: *QTE_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 0, slots: 40, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 3, diff: 0, space: 20.0, width: 16.5, height: 4.0}
   pads: *QTE_pads
 
 Samtec_QTE-060-xx-x-D-A_P0.8mm_Vertical:
@@ -610,12 +621,12 @@ Samtec_QTE-060-xx-x-D-A_P0.8mm_Vertical:
 Samtec_QTE-014-xx-x-D-DP_P0.8mm_Vertical: &QTE-014-xx-x-D-DP
   meta: &QTE-DP_meta
     description: *QPairs_desc
-    tags: 'connector Samtec Q-Pairs QTE mezzanine terminal vertical differential'
+    tags: 'connector Samtec QPairs QTE mezzanine terminal vertical differential'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-dp-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qte-xxx-xx-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 1, slots: 40, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 1, diff: 1, space: 20.0, width: 16.5, height: 4.0}
   pads: *QTE_pads
 
 Samtec_QTE-014-xx-x-D-DP-A_P0.8mm_Vertical:
@@ -636,7 +647,7 @@ Samtec_QTE-014-xx-x-D-DP-A_P0.8mm_Vertical:
 Samtec_QTE-028-xx-x-D-DP_P0.8mm_Vertical: &QTE-028-xx-x-D-DP
   meta: *QTE-DP_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 2, slots: 40, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 2, diff: 2, space: 20.0, width: 16.5, height: 4.0}
   pads: *QTE_pads
 
 Samtec_QTE-028-xx-x-D-DP-A_P0.8mm_Vertical:
@@ -657,7 +668,7 @@ Samtec_QTE-028-xx-x-D-DP-A_P0.8mm_Vertical:
 Samtec_QTE-042-xx-x-D-DP_P0.8mm_Vertical: &QTE-042-xx-x-D-DP
   meta: *QTE-DP_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 3, slots: 40, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 3, diff: 3, space: 20.0, width: 16.5, height: 4.0}
   pads: *QTE_pads
 
 Samtec_QTE-042-xx-x-D-DP-A_P0.8mm_Vertical:
@@ -671,15 +682,18 @@ Samtec_QTE-042-xx-x-D-DP-A_P0.8mm_Vertical:
 Samtec_QSE-020-xx-x-D_P0.8mm_Vertical: &QSE-020-xx-x-D
   meta: &QSE_meta
     description: *QStrip_desc
-    tags: 'connector Samtec Q-Strip QSE mezzanine socket vertical single-ended'
+    tags: 'connector Samtec QStrip QSE mezzanine socket vertical single-ended'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qse-xxx-xx-xxx-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qse-xxx-xx-x-d-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.27, height: 7.24}
-  banks: {n: 1, diff: 0, slots: 40, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 1, diff: 0, space: 20.0, width: 16.0, height: 3.8}
   pads: &QSE_pads
-    signal: {pitch: 0.8, y: 2.87, width: 0.41, height: 2.27}
-    planes: {height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
+    signal: {n: 40, pitch: 0.8, y: 2.87, width: 0.41, height: 2.27}
+    planes: #{height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
+      - {n: 2, pitch: 16.13, y: 0, width: 2.54, height: 0.43}
+      - {n: 2, pitch:  6.35, y: 0, width: 4.7,  height: 0.43}
+
 
 Samtec_QSE-020-xx-x-D-A_P0.8mm_Vertical:
   <<: *QSE-020-xx-x-D
@@ -699,7 +713,7 @@ Samtec_QSE-020-xx-x-D-A_P0.8mm_Vertical:
 Samtec_QSE-040-xx-x-D_P0.8mm_Vertical: &QSE-040-xx-x-D
   meta: *QSE_meta
   layout: {type: 'Socket', width: 41.28, height: 7.24}
-  banks: {n: 2, diff: 0, slots: 40, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 2, diff: 0, space: 20.0, width: 16.0, height: 3.8}
   pads: *QSE_pads
 
 Samtec_QSE-040-xx-x-D-A_P0.8mm_Vertical:
@@ -712,7 +726,7 @@ Samtec_QSE-040-xx-x-D-A_P0.8mm_Vertical:
 Samtec_QSE-060-xx-x-D_P0.8mm_Vertical: &QSE-060-xx-x-D
   meta: *QSE_meta
   layout: {type: 'Socket', width: 61.28, height: 7.24}
-  banks: {n: 3, diff: 0, slots: 40, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 3, diff: 0, space: 20.0, width: 16.0, height: 3.8}
   pads: *QSE_pads
 
 Samtec_QSE-060-xx-x-D-A_P0.8mm_Vertical:
@@ -725,12 +739,12 @@ Samtec_QSE-060-xx-x-D-A_P0.8mm_Vertical:
 Samtec_QSE-014-xx-x-D-DP_P0.8mm_Vertical: &QSE-014-xx-x-D-DP
   meta: &QSE-DP_meta
     description: *QPairs_desc
-    tags: 'connector Samtec Q-Pairs QSE mezzanine socket vertical differential'
+    tags: 'connector Samtec QPairs QSE mezzanine socket vertical differential'
     datasheet: >-
       [drawing](http://suddendocs.samtec.com/prints/qse-xxx-xx-xxx-d-dp-xxx-xxxxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qse-xxx-xx-x-d-dp-xxx-footprint.pdf)
   layout: {type: 'Socket', width: 21.27, height: 7.24}
-  banks: {n: 1, diff: 1, slots: 40, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 1, diff: 1, space: 20.0, width: 16.0, height: 3.8}
   pads: *QSE_pads
 
 Samtec_QSE-014-xx-x-D-DP-A_P0.8mm_Vertical:
@@ -743,7 +757,7 @@ Samtec_QSE-014-xx-x-D-DP-A_P0.8mm_Vertical:
 Samtec_QSE-028-xx-x-D-DP_P0.8mm_Vertical: &QSE-028-xx-x-D-DP
   meta: *QSE-DP_meta
   layout: {type: 'Socket', width: 41.28, height: 7.24}
-  banks: {n: 2, diff: 2, slots: 40, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 2, diff: 2, space: 20.0, width: 16.0, height: 3.8}
   pads: *QSE_pads
 
 Samtec_QSE-028-xx-x-D-DP-A_P0.8mm_Vertical:
@@ -756,7 +770,7 @@ Samtec_QSE-028-xx-x-D-DP-A_P0.8mm_Vertical:
 Samtec_QSE-042-xx-x-D-DP_P0.8mm_Vertical: &QSE-042-xx-x-D-DP
   meta: *QSE-DP_meta
   layout: {type: 'Socket', width: 61.28, height: 7.24}
-  banks: {n: 3, diff: 3, slots: 40, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 3, diff: 3, space: 20.0, width: 16.0, height: 3.8}
   pads: *QSE_pads
 
 Samtec_QSE-042-xx-x-D-DP-A_P0.8mm_Vertical:
diff --git a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
index 1024e1d24..9c25834a6 100755
--- a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
@@ -241,7 +241,7 @@ def generate_one_footprint(param, config, default_lib):
                         default='../conn_config_KLCv3.yaml',
                         help='Series KLC configuration YAML file')
     parser.add_argument('--library', type=str, nargs='?',
-                        default='Connector_Samtec_QStrip_QPairs',
+                        default='Connector_Samtec_RazorBeam',
                         help='Default KiCad library name (without extension)')
     parser.add_argument('files', metavar='file', type=str, nargs='*',
                         help='YAML file(s) containing footprint parameters')

From 5cea3cd5984f9ee8b5375d4bdac3d698d6143f96 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Fri, 7 Aug 2020 18:01:16 -0700
Subject: [PATCH 39/62] QStrip_Vertical: + Correct hole position error in
 socket footprints + Make make bank widths match datasheets

BasicBladeAndBeam_Vertical:
+ Add BTH and BSH series footprints
---
 .../BasicBladeAndBeam_Vertical.yaml           | 204 ++++++++++++++
 ...irs_Horizontal.py => QStrip_Horizontal.py} |   0
 ...Horizontal.yaml => QStrip_Horizontal.yaml} |   0
 ..._QPairs_Vertical.py => QStrip_Vertical.py} |  19 +-
 ...irs_Vertical.yaml => QStrip_Vertical.yaml} | 257 ++++++++++--------
 5 files changed, 354 insertions(+), 126 deletions(-)
 create mode 100644 scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml
 rename scripts/Connector/Connector_Samtec/{QStrip_QPairs_Horizontal.py => QStrip_Horizontal.py} (100%)
 rename scripts/Connector/Connector_Samtec/{QStrip_QPairs_Horizontal.yaml => QStrip_Horizontal.yaml} (100%)
 rename scripts/Connector/Connector_Samtec/{QStrip_QPairs_Vertical.py => QStrip_Vertical.py} (96%)
 rename scripts/Connector/Connector_Samtec/{QStrip_QPairs_Vertical.yaml => QStrip_Vertical.yaml} (76%)

diff --git a/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml b/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml
new file mode 100644
index 000000000..3f787a4d6
--- /dev/null
+++ b/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml
@@ -0,0 +1,204 @@
+# This file contains footprint specifications the vertical variations of Samtec
+# Basic Blade & Beam connectors. QStrip_QPairs_Vertical.py contains a complete
+# specification of the properties and data types that can be used in this file.
+#
+# Note:
+# - Basic Blade & Beam connectors are very similar to their Q Strip/Q Pairs
+#   counterparts. The only difference is that the Q Strip connectors have an
+#   integrated ground plane.
+# - This file should be passed as an argument to QStrip_Vertical.py
+# 
+
+################################################################################
+# BTH family (0.5mm terminal)
+Samtec_BTH-030-xx-x-D_P0.5mm_Vertical: &BTH-030-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: &BTH_meta
+    description: &desc >-
+      Samtec {pn:s} {pitch:1.2f}mm Basic Blade & Beam {type:s}; {pins:d} pins;
+      {ds:s}
+    tags: 'connector Samtec BTH mezzanine terminal vertical'
+    datasheet: >-
+  layout: {type: 'Terminal', width: 20.0, height: 5.97}
+  banks: {n: 1, diff: 0, space: 0, width: 16.88, height: 4.0}
+  pads:
+    signal: {n: 60, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
+
+Samtec_BTH-030-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BTH-030-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: -2.03, space: 18.48}
+ 
+Samtec_BTH-050-xx-x-D_P0.5mm_Vertical: &BTH-050-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BTH_meta
+  layout: {type: 'Terminal', width: 30.0, height: 5.97}
+  banks: {n: 1, diff: 0, space: 0, width: 26.88, height: 4.0}
+  pads:
+    signal: {n: 100, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
+
+Samtec_BTH-050-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BTH-050-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: -2.03, space: 28.48}
+
+Samtec_BTH-060-xx-x-D_P0.5mm_Vertical: &BTH-060-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BTH_meta
+  layout: {type: 'Terminal', width: 35.0, height: 5.97}
+  banks: {n: 1, diff: 0, space: 0, width: 31.88, height: 4.0}
+  pads:
+    signal: {n: 120, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
+
+Samtec_BTH-060-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BTH-060-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: -2.03, space: 33.48}
+
+Samtec_BTH-090-xx-x-D_P0.5mm_Vertical: &BTH-090-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BTH_meta
+  layout: {type: 'Terminal', width: 50.0, height: 5.97}
+  banks: {n: 1, diff: 0, space: 0, width: 46.88, height: 4.0}
+  pads:
+    signal: {n: 180, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
+
+Samtec_BTH-090-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BTH-090-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: -2.03, space: 48.48}
+
+Samtec_BTH-120-xx-x-D_P0.5mm_Vertical: &BTH-120-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BTH_meta
+  layout: {type: 'Terminal', width: 65.0, height: 5.97}
+  banks: {n: 1, diff: 0, space: 0, width: 61.88, height: 4.0}
+  pads:
+    signal: {n: 240, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
+
+Samtec_BTH-120-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BTH-120-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: -2.03, space: 63.48}
+
+Samtec_BTH-150-xx-x-D_P0.5mm_Vertical: &BTH-150-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BTH_meta
+  layout: {type: 'Terminal', width: 80.0, height: 5.97}
+  banks: {n: 1, diff: 0, space: 0, width: 76.88, height: 4.0}
+  pads:
+    signal: {n: 300, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
+
+Samtec_BTH-150-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BTH-150-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: -2.03, space: 78.48}
+
+################################################################################
+# BSH family (0.5mm socket)
+Samtec_BSH-030-xx-x-D_P0.5mm_Vertical: &BSH-030-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: &BSH_meta
+    description: *desc
+    tags: 'connector Samtec BSH mezzanine socket vertical'
+    datasheet: >-
+  layout: {type: 'Socket', width: 21.3, height: 7.24}
+  banks: {n: 1, diff: 0, space: 0, width: 16.6, height: 3.8}
+  pads:
+    signal: {n: 60, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
+
+
+Samtec_BSH-030-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BSH-030-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, space: 20.13, y: 2.67}
+
+Samtec_BSH-050-xx-x-D_P0.5mm_Vertical: &BSH-050-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BSH_meta
+  layout: {type: 'Socket', width: 31.3, height: 7.24}
+  banks: {n: 1, diff: 0, space: 20.0, width: 26.6, height: 3.8}
+  pads:
+    signal: {n: 100, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
+
+Samtec_BSH-050-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BSH-050-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, space: 30.13, y: 2.67}
+
+Samtec_BSH-060-xx-x-D_P0.5mm_Vertical: &BSH-060-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BSH_meta
+  layout: {type: 'Socket', width: 36.3, height: 7.24}
+  banks: {n: 1, diff: 0, space: 20.0, width: 31.6, height: 3.8}
+  pads:
+    signal: {n: 120, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
+
+Samtec_BSH-060-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BSH-060-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, space: 35.13, y: 2.67}
+
+Samtec_BSH-090-xx-x-D_P0.5mm_Vertical: &BSH-090-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BSH_meta
+  layout: {type: 'Socket', width: 51.3, height: 7.24}
+  banks: {n: 1, diff: 0, space: 20.0, width: 46.6, height: 3.8}
+  pads:
+    signal: {n: 180, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
+
+Samtec_BSH-090-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BSH-090-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, space: 50.13, y: 2.67}
+
+Samtec_BSH-120-xx-x-D_P0.5mm_Vertical: &BSH-120-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BSH_meta
+  layout: {type: 'Socket', width: 66.3, height: 7.24}
+  banks: {n: 1, diff: 0, space: 20.0, width: 61.6, height: 3.8}
+  pads:
+    signal: {n: 240, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
+
+Samtec_BSH-120-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BSH-120-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, space: 65.13, y: 2.67}
+
+Samtec_BSH-150-xx-x-D_P0.5mm_Vertical: &BSH-150-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BSH_meta
+  layout: {type: 'Socket', width: 81.3, height: 7.24}
+  banks: {n: 1, diff: 0, space: 20.0, width: 76.6, height: 3.8}
+  pads:
+    signal: {n: 300, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
+
+Samtec_BSH-150-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BSH-150-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, space: 80.13, y: 2.67}
+
+################################################################################
+# BTS family (0.635mm terminal)
+
+################################################################################
+# BSS family (0.635mm socket)
+
+################################################################################
+# BTE family (0.8mm terminal)
+
+################################################################################
+# BSE family (0.8mm socket)
+
diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.py b/scripts/Connector/Connector_Samtec/QStrip_Horizontal.py
similarity index 100%
rename from scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.py
rename to scripts/Connector/Connector_Samtec/QStrip_Horizontal.py
diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.yaml b/scripts/Connector/Connector_Samtec/QStrip_Horizontal.yaml
similarity index 100%
rename from scripts/Connector/Connector_Samtec/QStrip_QPairs_Horizontal.yaml
rename to scripts/Connector/Connector_Samtec/QStrip_Horizontal.yaml
diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
similarity index 96%
rename from scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
rename to scripts/Connector/Connector_Samtec/QStrip_Vertical.py
index 9e0d2f8a1..502f59b8d 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
@@ -42,18 +42,14 @@
     height: !!float mm # height of bank outline drawn on F.Fab
   pads:
     signal: # signal pin parameters
+      n: !!uint # number of pin positions in a bank
       pitch: !!float mm
+      y: !!float mm # vertical offset
       width: !!float mm # Pad width
       height: !!float mm # Pad height
-      y: !!float mm # vertical offset
     planes: # plane parameters
-      width:
-        - !!float mm # outer pins 
-        - !!float mm # inner pins
-      height: !!float mm # Ground pad heights
-      space: # Distance between ground pads within each bank
-        - !!float mm # outer pins
-        - !!float mm # inner pins
+      - {n, pitch, y, width, height}
+      - ...
   holes: # [optional] hole pair specifications, mirrored about y axis
     - # Hole spec. 1
       name: "" # [optional] name/number for plated holes
@@ -116,13 +112,6 @@ def generate_one_footprint(param, config, default_lib):
     # Bank 1 center point
     bank1_mid = x_inv * (pin1.x - pitch/2 + (pad_n / 4)*pitch)
 
-    # Ground pad parameters
-    #gnd_h = param['pads']['planes']['height']
-    # Combine spacing and width data into a zipped list: [(space,width), ...]
-    #gnd_sw = [sw for sw in zip(param['pads']['planes']['space'],
-    #                           param['pads']['planes']['width'])]
-    #gnd_sw.sort() # Sort from lowest (inner) to highest (outer) spacing
-
     # Place pads
     n = 1 # Pin counter
     pin = [] # Pin position list, organized by bank
diff --git a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
similarity index 76%
rename from scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
rename to scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
index 744827c3f..f53767255 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_QPairs_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
@@ -14,6 +14,7 @@
 ################################################################################
 # QTH family; 1 bank
 Samtec_QTH-030-xx-x-D_P0.5mm_Vertical: &QTH-030-xx-x-D
+  library: 'Connector_Samtec_QStrip'
   meta: &QTH_meta
     description: &QStrip_desc >-
       Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip;
@@ -23,7 +24,7 @@ Samtec_QTH-030-xx-x-D_P0.5mm_Vertical: &QTH-030-xx-x-D
       [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 1, diff: 0, space: 20.0, width: 16.88, height: 4.0}
   pads: &QTH_pads
     signal: {n: 60, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
     planes: #{height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
@@ -34,7 +35,7 @@ Samtec_QTH-030-xx-x-D-A_P0.5mm_Vertical:
   <<: *QTH-030-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 18.48, y: -2.03}
+    - {drill: 1.0, space: 18.48, y: -2.03}
 
 ## Samtec_QTH-030-xx-x-D-L_P0.5mm_Vertical:
 ##   <<: *QTH-030-xx-x-D
@@ -48,21 +49,22 @@ Samtec_QTH-030-xx-x-D-A_P0.5mm_Vertical:
 ##   add-tags: 'alignment-pins latching'
 ##   width: 23.0
 ##   holes:
-##     - {drill: 1.02, space: 18.48, y: -2.03}
+##     - {drill: 1.0, space: 18.48, y: -2.03}
 ##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
 
 # QTH family; 2 banks
 Samtec_QTH-060-xx-x-D_P0.5mm_Vertical: &QTH-060-xx-x-D
+  library: 'Connector_Samtec_QStrip'
   meta: *QTH_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 0, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 2, diff: 0, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTH_pads
 
 Samtec_QTH-060-xx-x-D-A_P0.5mm_Vertical:
   <<: *QTH-060-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 38.48, y: -2.03}
+    - {drill: 1.0, space: 38.48, y: -2.03}
 
 ## Samtec_QTH-060-xx-x-D-L_P0.5mm_Vertical:
 ##   <<: *QTH-060-xx-x-D
@@ -76,24 +78,26 @@ Samtec_QTH-060-xx-x-D-A_P0.5mm_Vertical:
 ##   add-tags: 'alignment-pins latching'
 ##   width: 43.0
 ##   holes:
-##     - {drill: 1.02, space: 38.48, y: -2.03}
+##     - {drill: 1.0, space: 38.48, y: -2.03}
 ##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
 
 # QTH family; 3 banks
 Samtec_QTH-090-xx-x-D_P0.5mm_Vertical: &QTH-090-xx-x-D
+  library: 'Connector_Samtec_QStrip'
   meta: *QTH_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 0, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 3, diff: 0, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTH_pads
 
 Samtec_QTH-090-xx-x-D-A_P0.5mm_Vertical:
   <<: *QTH-090-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 58.48, y: -2.03}
+    - {drill: 1.0, space: 58.48, y: -2.03}
 
-# QTH family; 1 bank; differential
+# QTH-DP family; 1 bank; differential
 Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical: &QTH-020-xx-x-D-DP
+  library: 'Connector_Samtec_QStrip'
   meta: &QTH-DP_meta
     description: &QPairs_desc >-
       Samtec {pn:s} {pitch:1.2f}mm Q Pairs High-Speed Ground Plane {type:s} Strip,
@@ -103,14 +107,14 @@ Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical: &QTH-020-xx-x-D-DP
       [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 1, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 1, diff: 1, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTH_pads
 
 Samtec_QTH-020-xx-x-D-DP-A_P0.5mm_Vertical:
   <<: *QTH-020-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 18.48, y: -2.03}
+    - {drill: 1.0, space: 18.48, y: -2.03}
 
 ## Samtec_QTH-020-xx-x-D-DP-L_P0.5mm_Vertical:
 ##   <<: *QTH-020-xx-x-D-DP
@@ -124,21 +128,22 @@ Samtec_QTH-020-xx-x-D-DP-A_P0.5mm_Vertical:
 ##   add-tags: 'alignment-pins latching'
 ##   width: 23.0
 ##   holes:
-##     - {drill: 1.02, space: 18.48, y: -2.03}
+##     - {drill: 1.0, space: 18.48, y: -2.03}
 ##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
 
-# QTH family; 2 banks; differential
+# QTH-DP family; 2 banks; differential
 Samtec_QTH-040-xx-x-D-DP_P0.5mm_Vertical: &QTH-040-xx-x-D-DP
+  library: 'Connector_Samtec_QStrip'
   meta: *QTH-DP_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 2, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 2, diff: 2, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTH_pads
 
 Samtec_QTH-040-xx-x-D-DP-A_P0.5mm_Vertical:
   <<: *QTH-040-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 38.48, y: -2.03}
+    - {drill: 1.0, space: 38.48, y: -2.03}
 
 ## Samtec_QTH-040-xx-x-D-DP-L_P0.5mm_Vertical:
 ##   <<: *QTH-040-xx-x-D-DP
@@ -152,21 +157,22 @@ Samtec_QTH-040-xx-x-D-DP-A_P0.5mm_Vertical:
 ##   add-tags: 'alignment-pins latching'
 ##   width: 43.0
 ##   holes:
-##     - {drill: 1.02, space: 38.48, y: -2.03}
+##     - {drill: 1.0, space: 38.48, y: -2.03}
 ##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
 
-# QTH family; 3 banks; differential
+# QTH-DP family; 3 banks; differential
 Samtec_QTH-060-xx-x-D-DP_P0.5mm_Vertical: &QTH-060-xx-x-D-DP
+  library: 'Connector_Samtec_QStrip'
   meta: *QTH-DP_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 3, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 3, diff: 3, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTH_pads
 
 Samtec_QTH-060-xx-x-D-DP-A_P0.5mm_Vertical:
   <<: *QTH-060-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 58.48, y: -2.03}
+    - {drill: 1.0, space: 58.48, y: -2.03}
 
 # QTH family; 3 banks; application-specific
 Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical:
@@ -181,14 +187,15 @@ Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical:
       Samtec {pn:s} HSMC Card {type:s}; modified QTH-090-01-L-D-A,
       Bank 1 differential; {ds:s}
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 1, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 3, diff: 1, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTH_pads
   holes:
-    - {drill: 1.02, space: 58.48, y: -2.03}
+    - {drill: 1.0, space: 58.48, y: -2.03}
 
 ################################################################################
 # QSH family; 1 bank
 Samtec_QSH-030-xx-x-D_P0.5mm_Vertical: &QSH-030-xx-x-D
+  library: 'Connector_Samtec_QStrip'
   meta: &QSH_meta
     description: *QStrip_desc
     tags: 'connector Samtec QStrip QSH mezzanine socket vertical single-ended'
@@ -196,9 +203,9 @@ Samtec_QSH-030-xx-x-D_P0.5mm_Vertical: &QSH-030-xx-x-D
       [drawing](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.31, height: 7.24}
-  banks: {n: 1, diff: 0, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 1, diff: 0, space: 20.0, width: 17.14, height: 3.8}
   pads: &QSH_pads
-    signal: {n: 60, pitch: 0.5, y: 2.67, width: 0.279, height: 2.27}
+    signal: {n: 60, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
     planes: #{height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
       - {n: 2, pitch: 16.13, y: 0, width: 2.54, height: 0.43}
       - {n: 2, pitch:  6.35, y: 0, width: 4.7,  height: 0.43}
@@ -208,54 +215,57 @@ Samtec_QSH-030-xx-x-D-A_P0.5mm_Vertical:
   <<: *QSH-030-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 20.13, y: -2.03}
+    - {drill: 1.0, space: 20.13, y: 2.67}
 
 ## Samtec_QSH-030-xx-x-D-LC_P0.5mm_Vertical:
 ##   <<: *QSH-030-xx-x-D
 ##   add-tags: 'locking-clips'
 ##   holes:
-##     - {drill: 1.19, space: 20.13, y: 2.03}
+##     - {drill: 1.19, space: 20.13, y: 2.67}
 
 # QSH family; 2 banks
 Samtec_QSH-060-xx-x-D_P0.5mm_Vertical: &QSH-060-xx-x-D
+  library: 'Connector_Samtec_QStrip'
   meta: *QSH_meta
   layout: {type: 'Socket', width: 41.31, height: 7.24}
-  banks: {n: 2, diff: 0, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 2, diff: 0, space: 20.0, width: 17.14, height: 3.8}
   pads: *QSH_pads
 
 Samtec_QSH-060-xx-x-D-A_P0.5mm_Vertical:
   <<: *QSH-060-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 40.13, y: -2.03}
+    - {drill: 1.0, space: 40.13, y: 2.67}
 
 ## Samtec_QSH-060-xx-x-D-LC_P0.5mm_Vertical:
 ##   <<: *QSH-060-xx-x-D
 ##   add-tags: 'locking-clips'
 ##   holes:
-##     - {drill: 1.19, space: 40.13, y: 2.03}
+##     - {drill: 1.19, space: 40.13, y: 2.67}
 
 # QSH family; 3 banks
 Samtec_QSH-090-xx-x-D_P0.5mm_Vertical: &QSH-090-xx-x-D
+  library: 'Connector_Samtec_QStrip'
   meta: *QSH_meta
   layout: {type: 'Socket', width: 61.38, height: 7.24}
-  banks: {n: 3, diff: 0, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 3, diff: 0, space: 20.0, width: 17.14, height: 3.8}
   pads: *QSH_pads
 
 Samtec_QSH-090-xx-x-D-A_P0.5mm_Vertical:
   <<: *QSH-090-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 60.13, y: -2.03}
+    - {drill: 1.0, space: 60.13, y: 2.67}
 
 ## Samtec_QSH-090-xx-x-D-LC_P0.5mm_Vertical:
 ##   <<: *QSH-090-xx-x-D
 ##   add-tags: 'locking-clips'
 ##   holes:
-##     - {drill: 1.19, space: 60.13, y: 2.03}
+##     - {drill: 1.19, space: 60.13, y: 2.67}
 
-# QSH family; 1 bank; differential
+# QSH-DP family; 1 bank; differential
 Samtec_QSH-020-xx-x-D-DP_P0.5mm_Vertical: &QSH-020-xx-x-D-DP
+  library: 'Connector_Samtec_QStrip'
   meta: &QSH-DP_meta
     description: *QPairs_desc
     tags: 'connector Samtec QPairs QSH mezzanine socket vertical differential'
@@ -263,54 +273,56 @@ Samtec_QSH-020-xx-x-D-DP_P0.5mm_Vertical: &QSH-020-xx-x-D-DP
       [drawing](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-dp-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.31, height: 7.24}
-  banks: {n: 1, diff: 1, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 1, diff: 1, space: 20.0, width: 17.14, height: 3.8}
   pads: *QSH_pads
 
 Samtec_QSH-020-xx-x-D-DP-A_P0.5mm_Vertical:
   <<: *QSH-020-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 20.13, y: -2.03}
+    - {drill: 1.0, space: 20.13, y: 2.67}
 
 ## Samtec_QSH-020-xx-x-D-DP-LC_P0.5mm_Vertical:
 ##   <<: *QSH-020-xx-x-D-DP
 ##   add-tags: 'locking-clips'
 ##   holes:
-##     - {drill: 1.19, space: 20.13, y: 2.03}
+##     - {drill: 1.19, space: 20.13, y: 2.67}
 
-# QSH family; 2 banks; differential
+# QSH-DP family; 2 banks; differential
 Samtec_QSH-040-xx-x-D-DP_P0.5mm_Vertical: &QSH-040-xx-x-D-DP
+  library: 'Connector_Samtec_QStrip'
   meta: *QSH-DP_meta
   layout: {type: 'Socket', width: 41.31, height: 7.24}
-  banks: {n: 2, diff: 2, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 2, diff: 2, space: 20.0, width: 17.14, height: 3.8}
   pads: *QSH_pads
 
 Samtec_QSH-040-xx-x-D-DP-A_P0.5mm_Vertical:
   <<: *QSH-040-xx-x-D-DP
   holes:
-    - {drill: 1.02, space: 40.13, y: -2.03}
+    - {drill: 1.0, space: 40.13, y: 2.67}
 
 ## Samtec_QSH-040-xx-x-D-DP-LC_P0.5mm_Vertical:
 ##   <<: *QSH-040-xx-x-D-DP
 ##   holes:
-##     - {drill: 1.19, space: 40.13, y: 2.03}
+##     - {drill: 1.19, space: 40.13, y: 2.67}
 
-# QSH family; 3 banks; differential
+# QSH-DP family; 3 banks; differential
 Samtec_QSH-060-xx-x-D-DP_P0.5mm_Vertical: &QSH-060-xx-x-D-DP
+  library: 'Connector_Samtec_QStrip'
   meta: *QSH-DP_meta
   layout: {type: 'Socket', width: 61.38, height: 7.24}
-  banks: {n: 3, diff: 3, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 3, diff: 3, space: 20.0, width: 17.14, height: 3.8}
   pads: *QSH_pads
 
 Samtec_QSH-060-xx-x-D-DP-A_P0.5mm_Vertical:
   <<: *QSH-060-xx-x-D-DP
   holes:
-    - {drill: 1.02, space: 60.13, y: -2.03}
+    - {drill: 1.0, space: 60.13, y: 2.67}
 
 ## Samtec_QSH-060-xx-x-D-DP-LC_P0.5mm_Vertical:
 ##   <<: *QSH-060-xx-x-D-DP
 ##   holes:
-##     - {drill: 1.19, space: 60.13, y: 2.03}
+##     - {drill: 1.19, space: 60.13, y: 2.67}
 
 # QSH family; 3 banks; specialized
 Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
@@ -325,14 +337,15 @@ Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
       Samtec {pn:s} HSMC Host {type:s}; modified QSH-090-01-L-D-A,
       Bank 1 differential; {ds:s}
   layout: {type: 'Socket', width: 61.38, height: 7.24}
-  banks: {n: 3, diff: 1, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 3, diff: 1, space: 20.0, width: 17.14, height: 3.8}
   pads: *QSH_pads
   holes:
-    - {drill: 1.02, space: 60.13, y: -2.03}
+    - {drill: 1.0, space: 60.13, y: 2.67}
 
 ################################################################################
 # QTS family; 1 bank
 Samtec_QTS-025-xx-x-D_P0.635mm_Vertical: &QTS-025-xx-x-D
+  library: 'Connector_Samtec_QStrip'
   meta: &QTS_meta
     description: *QStrip_desc
     tags: 'connector Samtec QStrip QTS mezzanine terminal vertical'
@@ -340,7 +353,7 @@ Samtec_QTS-025-xx-x-D_P0.635mm_Vertical: &QTS-025-xx-x-D
       [drawing](http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qts-xxx-xx-x-d-xx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 1, diff: 0, space: 20.0, width: 16.88, height: 4.0}
   pads: &QTS_pads
     signal: {n: 50, pitch: 0.635, y: 3.086, width: 0.406, height: 1.45}
     planes: #{height: 0.635, width: [2.54, 4.7], space: [16.89, 6.35]}
@@ -351,36 +364,39 @@ Samtec_QTS-025-xx-x-D-A_P0.635mm_Vertical:
   <<: *QTS-025-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 18.48, y: -2.03}
+    - {drill: 1.0, space: 18.48, y: -2.03}
 
 # QTS family; 2 banks
 Samtec_QTS-050-xx-x-D_P0.635mm_Vertical: &QTS-050-xx-x-D
+  library: 'Connector_Samtec_QStrip'
   meta: *QTS_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 0, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 2, diff: 0, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTS_pads
 
 Samtec_QTS-050-xx-x-D-A_P0.635mm_Vertical:
   <<: *QTS-050-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 38.48, y: -2.03}
+    - {drill: 1.0, space: 38.48, y: -2.03}
 
 # QTS family; 3 banks
 Samtec_QTS-075-xx-x-D_P0.635mm_Vertical: &QTS-075-xx-x-D
+  library: 'Connector_Samtec_QStrip'
   meta: *QTS_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 0, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 3, diff: 0, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTS_pads
 
 Samtec_QTS-075-xx-x-D-A_P0.635mm_Vertical:
   <<: *QTS-075-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 58.48, y: -2.03}
+    - {drill: 1.0, space: 58.48, y: -2.03}
 
-# QTS family; 1 bank; differential
+# QTS-DP family; 1 bank; differential
 Samtec_QTS-016-xx-x-D-DP_P0.635mm_Vertical: &QTS-016-xx-x-D-DP
+  library: 'Connector_Samtec_QStrip'
   meta: &QTS-DP_meta
     description: *QPairs_desc
     tags: 'connector Samtec QPairs QTS mezzanine terminal vertical differential'
@@ -388,14 +404,14 @@ Samtec_QTS-016-xx-x-D-DP_P0.635mm_Vertical: &QTS-016-xx-x-D-DP
       [drawing](http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-dp-xx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qts-xxx-xx-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 1, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 1, diff: 1, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTS_pads
 
 Samtec_QTS-016-xx-x-D-DP-A_P0.635mm_Vertical:
   <<: *QTS-016-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 18.48, y: -2.03}
+    - {drill: 1.0, space: 18.48, y: -2.03}
 
 ## Samtec_QTS-016-xx-x-D-DP-LC_P0.635mm_Vertical:
 ##   <<: *QTS-016-xx-x-D-DP
@@ -403,18 +419,19 @@ Samtec_QTS-016-xx-x-D-DP-A_P0.635mm_Vertical:
 ##   holes:
 ##     - {drill: 1.16, space: 18.48, y: -2.03}
 
-# QTS family; 2 banks; differential
+# QTS-DP family; 2 banks; differential
 Samtec_QTS-032-xx-x-D-DP_P0.635mm_Vertical: &QTS-032-xx-x-D-DP
+  library: 'Connector_Samtec_QStrip'
   meta: *QTS-DP_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 2, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 2, diff: 2, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTS_pads
 
 Samtec_QTS-032-xx-x-D-DP-A_P0.635mm_Vertical:
   <<: *QTS-032-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 38.48, y: -2.03}
+    - {drill: 1.0, space: 38.48, y: -2.03}
 
 ## Samtec_QTS-032-xx-x-D-DP-LC_P0.635mm_Vertical:
 ##   <<: *QTS-032-xx-x-D-DP
@@ -422,18 +439,19 @@ Samtec_QTS-032-xx-x-D-DP-A_P0.635mm_Vertical:
 ##   holes:
 ##     - {drill: 1.16, space: 38.48, y: -2.03}
 
-# QTS family; 3 banks; differential
+# QTS-DP family; 3 banks; differential
 Samtec_QTS-048-xx-x-D-DP_P0.635mm_Vertical: &QTS-048-xx-x-D-DP
+  library: 'Connector_Samtec_QStrip'
   meta: *QTS-DP_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 3, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 3, diff: 3, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTS_pads
 
 Samtec_QTS-048-xx-x-D-DP-A_P0.635mm_Vertical:
   <<: *QTS-048-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 58.48, y: -2.03}
+    - {drill: 1.0, space: 58.48, y: -2.03}
 
 ## Samtec_QTS-048-xx-x-D-DP-LC_P0.635mm_Vertical:
 ##   <<: *QTS-048-xx-x-D-DP
@@ -444,6 +462,7 @@ Samtec_QTS-048-xx-x-D-DP-A_P0.635mm_Vertical:
 ################################################################################
 # QSS family; 1 bank
 Samtec_QSS-025-xx-x-D_P0.635mm_Vertical: &QSS-025-xx-x-D
+  library: 'Connector_Samtec_QStrip'
   meta: &QSS_meta
     description: *QStrip_desc
     tags: 'connector Samtec QStrip QSS mezzanine socket vertical single-ended'
@@ -451,7 +470,7 @@ Samtec_QSS-025-xx-x-D_P0.635mm_Vertical: &QSS-025-xx-x-D
       [drawing](http://suddendocs.samtec.com/prints/qss-xxx-xx-xxx-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qss-xxx-xx-x-d-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.27, height: 7.24}
-  banks: {n: 1, diff: 0, space: 20.0, width: 16.0, height: 3.66}
+  banks: {n: 1, diff: 0, space: 20.0, width: 16.64, height: 3.66}
   pads: &QSS_pads
     signal: {n: 50, pitch: 0.635, y: 2.865, width: 0.406, height: 2.273}
     planes: #{height: 0.432, width: [2.8, 4.7], space: [16.13, 6.35]}
@@ -462,36 +481,39 @@ Samtec_QSS-025-xx-x-D-A_P0.635mm_Vertical:
   <<: *QSS-025-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 20.0, y: -2.67}
+    - {drill: 1.0, space: 20.0, y: 2.67}
 
 # QSS family; 2 banks
 Samtec_QSS-050-xx-x-D_P0.635mm_Vertical: &QSS-050-xx-x-D
+  library: 'Connector_Samtec_QStrip'
   meta: *QSS_meta
   layout: {type: 'Socket', width: 41.28, height: 7.24}
-  banks: {n: 2, diff: 0, space: 20.0, width: 16.0, height: 3.66}
+  banks: {n: 2, diff: 0, space: 20.0, width: 16.64, height: 3.66}
   pads: *QSS_pads
 
 Samtec_QSS-050-xx-x-D-A_P0.635mm_Vertical:
   <<: *QSS-050-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 40.0, y: -2.67}
+    - {drill: 1.0, space: 40.0, y: 2.67}
 
 # QSS family; 3 banks
 Samtec_QSS-075-xx-x-D_P0.635mm_Vertical: &QSS-075-xx-x-D
+  library: 'Connector_Samtec_QStrip'
   meta: *QSS_meta
   layout: {type: 'Socket', width: 61.28, height: 7.24}
-  banks: {n: 3, diff: 0, space: 20.0, width: 16.0, height: 3.66}
+  banks: {n: 3, diff: 0, space: 20.0, width: 16.64, height: 3.66}
   pads: *QSS_pads
 
 Samtec_QSS-075-xx-x-D-A_P0.635mm_Vertical:
   <<: *QSS-075-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 60.0, y: -2.67}
+    - {drill: 1.0, space: 60.0, y: 2.67}
 
-# QSS family; 1 bank; differential
+# QSS-DP family; 1 bank; differential
 Samtec_QSS-016-xx-x-D-DP_P0.635mm_Vertical: &QSS-016-xx-x-D-DP
+  library: 'Connector_Samtec_QStrip'
   meta: &QSS-DP_meta
     description: *QPairs_desc
     tags: 'connector Samtec QPairs QSS mezzanine socket vertical differential'
@@ -499,14 +521,14 @@ Samtec_QSS-016-xx-x-D-DP_P0.635mm_Vertical: &QSS-016-xx-x-D-DP
       [drawing](http://suddendocs.samtec.com/prints/qss-xxx-xx-xxx-d-dp-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qss-xxx-xx-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.27, height: 7.24}
-  banks: {n: 1, diff: 1, space: 20.0, width: 16.0, height: 3.66}
+  banks: {n: 1, diff: 1, space: 20.0, width: 16.64, height: 3.66}
   pads: *QSS_pads
 
 Samtec_QSS-016-xx-x-D-DP-A_P0.635mm_Vertical:
   <<: *QSS-016-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 20.0, y: -2.67}
+    - {drill: 1.0, space: 20.0, y: 2.67}
 
 ## Samtec_QSS-016-xx-x-D-DP-LC_P0.635mm_Vertical:
 ##   <<: *QSS-016-xx-x-D-DP
@@ -514,18 +536,19 @@ Samtec_QSS-016-xx-x-D-DP-A_P0.635mm_Vertical:
 ##   holes:
 ##     - {drill: 1.16, space: 20.0, y: 2.67}
 
-# QSS family; 2 banks; differential
+# QSS-DP family; 2 banks; differential
 Samtec_QSS-032-xx-x-D-DP_P0.635mm_Vertical: &QSS-032-xx-x-D-DP
+  library: 'Connector_Samtec_QStrip'
   meta: *QSS-DP_meta
   layout: {type: 'Socket', width: 41.28, height: 7.24}
-  banks: {n: 2, diff: 2, space: 20.0, width: 16.0, height: 3.66}
+  banks: {n: 2, diff: 2, space: 20.0, width: 16.64, height: 3.66}
   pads: *QSS_pads
 
 Samtec_QSS-032-xx-x-D-DP-A_P0.635mm_Vertical:
   <<: *QSS-032-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 40.0, y: -2.67}
+    - {drill: 1.0, space: 40.0, y: 2.67}
 
 ## Samtec_QSS-032-xx-x-D-DP-LC_P0.635mm_Vertical:
 ##   <<: *QSS-032-xx-x-D-DP
@@ -533,18 +556,19 @@ Samtec_QSS-032-xx-x-D-DP-A_P0.635mm_Vertical:
 ##   holes:
 ##     - {drill: 1.16, space: 40.0, y: 2.67}
 
-# QSS family; 3 banks; differential
+# QSS-DP family; 3 banks; differential
 Samtec_QSS-048-xx-x-D-DP_P0.635mm_Vertical: &QSS-048-xx-x-D-DP
+  library: 'Connector_Samtec_QStrip'
   meta: *QSS-DP_meta
   layout: {type: 'Socket', width: 61.28, height: 7.24}
-  banks: {n: 3, diff: 3, space: 20.0, width: 16.0, height: 3.66}
+  banks: {n: 3, diff: 3, space: 20.0, width: 16.64, height: 3.66}
   pads: *QSS_pads
 
 Samtec_QSS-048-xx-x-D-DP-A_P0.635mm_Vertical:
   <<: *QSS-048-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 60.0, y: -2.67}
+    - {drill: 1.0, space: 60.0, y: 2.67}
 
 ## Samtec_QSS-048-xx-x-D-DP-LC_P0.635mm_Vertical:
 ##   <<: *QSS-048-xx-x-D-DP
@@ -555,6 +579,7 @@ Samtec_QSS-048-xx-x-D-DP-A_P0.635mm_Vertical:
 ################################################################################
 # QTE family; 1 bank
 Samtec_QTE-020-xx-x-D_P0.8mm_Vertical: &QTE-020-xx-x-D
+  library: 'Connector_Samtec_QStrip'
   meta: &QTE_meta
     description: *QStrip_desc
     tags: 'connector Samtec QStrip QTE mezzanine terminal vertical'
@@ -562,7 +587,7 @@ Samtec_QTE-020-xx-x-D_P0.8mm_Vertical: &QTE-020-xx-x-D
       [drawing](http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-xxx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 1, diff: 0, space: 20.0, width: 16.88, height: 4.0}
   pads: &QTE_pads
     signal: {n: 40, pitch: 0.8, y: 2.98, width: 0.46, height: 1.94}
     planes: #{height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
@@ -573,52 +598,55 @@ Samtec_QTE-020-xx-x-D-A_P0.8mm_Vertical:
   <<: *QTE-020-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 18.48, y: -2.03}
+    - {drill: 1.0, space: 18.48, y: -2.03}
 
 ## Samtec_QTE-020-xx-x-D-A-L_P0.8mm_Vertical:
 ##   <<: *QTE-020-xx-x-D
 ##   add-tags: 'alignment-pins latching'
 ##   width: 23.0
 ##   holes:
-##     - {drill: 1.02, space: 18.48, y: -2.03}
+##     - {drill: 1.0, space: 18.48, y: -2.03}
 ##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
 
 # QTE family; 2 banks
 Samtec_QTE-040-xx-x-D_P0.8mm_Vertical: &QTE-040-xx-x-D
+  library: 'Connector_Samtec_QStrip'
   meta: *QTE_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 0, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 2, diff: 0, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTE_pads
 
 Samtec_QTE-040-xx-x-D-A_P0.8mm_Vertical:
   <<: *QTE-040-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 38.48, y: -2.03}
+    - {drill: 1.0, space: 38.48, y: -2.03}
 
 ## Samtec_QTE-040-xx-x-D-A-L_P0.8mm_Vertical:
 ##   <<: *QTE-040-xx-x-D
 ##   add-tags: 'alignment-pins latching'
 ##   width: 43.0
 ##   holes:
-##     - {drill: 1.02, space: 38.48, y: -2.03}
+##     - {drill: 1.0, space: 38.48, y: -2.03}
 ##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
 
 # QTE family; 3 banks
 Samtec_QTE-060-xx-x-D_P0.8mm_Vertical: &QTE-060-xx-x-D
+  library: 'Connector_Samtec_QStrip'
   meta: *QTE_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 0, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 3, diff: 0, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTE_pads
 
 Samtec_QTE-060-xx-x-D-A_P0.8mm_Vertical:
   <<: *QTE-060-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 58.48, y: -2.03}
+    - {drill: 1.0, space: 58.48, y: -2.03}
 
-# QTE family; 1 bank; differential
+# QTE-DP family; 1 bank; differential
 Samtec_QTE-014-xx-x-D-DP_P0.8mm_Vertical: &QTE-014-xx-x-D-DP
+  library: 'Connector_Samtec_QStrip'
   meta: &QTE-DP_meta
     description: *QPairs_desc
     tags: 'connector Samtec QPairs QTE mezzanine terminal vertical differential'
@@ -626,60 +654,63 @@ Samtec_QTE-014-xx-x-D-DP_P0.8mm_Vertical: &QTE-014-xx-x-D-DP
       [drawing](http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-dp-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qte-xxx-xx-x-d-dp-xx-footprint.pdf)
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 1, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 1, diff: 1, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTE_pads
 
 Samtec_QTE-014-xx-x-D-DP-A_P0.8mm_Vertical:
   <<: *QTE-014-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 18.48, y: -2.03}
+    - {drill: 1.0, space: 18.48, y: -2.03}
 
 ## Samtec_QTE-014-xx-x-D-DP-A-L_P0.8mm_Vertical:
 ##   <<: *QTE-014-xx-x-D-DP
 ##   add-tags: 'alignment-pins latching'
 ##   width: 23.0
 ##   holes:
-##     - {drill: 1.02, space: 18.48, y: -2.03}
+##     - {drill: 1.0, space: 18.48, y: -2.03}
 ##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.51}
 
-# QTE family; 2 banks; differential
+# QTE-DP family; 2 banks; differential
 Samtec_QTE-028-xx-x-D-DP_P0.8mm_Vertical: &QTE-028-xx-x-D-DP
+  library: 'Connector_Samtec_QStrip'
   meta: *QTE-DP_meta
   layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 2, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 2, diff: 2, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTE_pads
 
 Samtec_QTE-028-xx-x-D-DP-A_P0.8mm_Vertical:
   <<: *QTE-028-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 38.48, y: -2.03}
+    - {drill: 1.0, space: 38.48, y: -2.03}
 
 ## Samtec_QTE-028-xx-x-D-DP-A-L_P0.8mm_Vertical:
 ##   <<: *QTE-028-xx-x-D-DP
 ##   add-tags: 'alignment-pins latching'
 ##   width: 23.0
 ##   holes:
-##     - {drill: 1.02, space: 38.48, y: -2.03}
+##     - {drill: 1.0, space: 38.48, y: -2.03}
 ##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.51}
 
-# QTE family; 3 banks; differential
+# QTE-DP family; 3 banks; differential
 Samtec_QTE-042-xx-x-D-DP_P0.8mm_Vertical: &QTE-042-xx-x-D-DP
+  library: 'Connector_Samtec_QStrip'
   meta: *QTE-DP_meta
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 3, space: 20.0, width: 16.5, height: 4.0}
+  banks: {n: 3, diff: 3, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTE_pads
 
 Samtec_QTE-042-xx-x-D-DP-A_P0.8mm_Vertical:
   <<: *QTE-042-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 58.48, y: -2.03}
+    - {drill: 1.0, space: 58.48, y: -2.03}
 
 ################################################################################
 # QSE family; 1 bank
 Samtec_QSE-020-xx-x-D_P0.8mm_Vertical: &QSE-020-xx-x-D
+  library: 'Connector_Samtec_QStrip'
   meta: &QSE_meta
     description: *QStrip_desc
     tags: 'connector Samtec QStrip QSE mezzanine socket vertical single-ended'
@@ -687,56 +718,58 @@ Samtec_QSE-020-xx-x-D_P0.8mm_Vertical: &QSE-020-xx-x-D
       [drawing](http://suddendocs.samtec.com/prints/qse-xxx-xx-xxx-d-xxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qse-xxx-xx-x-d-xx-footprint.pdf)
   layout: {type: 'Socket', width: 21.27, height: 7.24}
-  banks: {n: 1, diff: 0, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 1, diff: 0, space: 20.0, width: 16.34, height: 3.8}
   pads: &QSE_pads
     signal: {n: 40, pitch: 0.8, y: 2.87, width: 0.41, height: 2.27}
     planes: #{height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
       - {n: 2, pitch: 16.13, y: 0, width: 2.54, height: 0.43}
       - {n: 2, pitch:  6.35, y: 0, width: 4.7,  height: 0.43}
 
-
 Samtec_QSE-020-xx-x-D-A_P0.8mm_Vertical:
   <<: *QSE-020-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 20.13, y: -2.67}
+    - {drill: 1.0, space: 20.13, y: 2.67}
 
 ## Samtec_QSE-020-xx-x-D-A-L_P0.8mm_Vertical:
 ##   <<: *QSE-020-xx-x-D
 ##   add-tags: 'alignment-pins latching'
 ##   width: 26.61
 ##   holes:
-##     - {drill: 1.02, space: 20.13, y: 2.67}
+##     - {drill: 1.0, space: 20.13, y: 2.67}
 ##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 24.36, y: -0.51}
 
 # QSE family; 2 banks
 Samtec_QSE-040-xx-x-D_P0.8mm_Vertical: &QSE-040-xx-x-D
+  library: 'Connector_Samtec_QStrip'
   meta: *QSE_meta
   layout: {type: 'Socket', width: 41.28, height: 7.24}
-  banks: {n: 2, diff: 0, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 2, diff: 0, space: 20.0, width: 16.34, height: 3.8}
   pads: *QSE_pads
 
 Samtec_QSE-040-xx-x-D-A_P0.8mm_Vertical:
   <<: *QSE-040-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 40.13, y: -2.67}
+    - {drill: 1.0, space: 40.13, y: 2.67}
 
 # QSE family; 3 banks
 Samtec_QSE-060-xx-x-D_P0.8mm_Vertical: &QSE-060-xx-x-D
+  library: 'Connector_Samtec_QStrip'
   meta: *QSE_meta
   layout: {type: 'Socket', width: 61.28, height: 7.24}
-  banks: {n: 3, diff: 0, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 3, diff: 0, space: 20.0, width: 16.34, height: 3.8}
   pads: *QSE_pads
 
 Samtec_QSE-060-xx-x-D-A_P0.8mm_Vertical:
   <<: *QSE-060-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 60.13, y: -2.67}
+    - {drill: 1.0, space: 60.13, y: 2.67}
 
-# QSE family; 1 bank; differential
+# QSE-DP family; 1 bank; differential
 Samtec_QSE-014-xx-x-D-DP_P0.8mm_Vertical: &QSE-014-xx-x-D-DP
+  library: 'Connector_Samtec_QStrip'
   meta: &QSE-DP_meta
     description: *QPairs_desc
     tags: 'connector Samtec QPairs QSE mezzanine socket vertical differential'
@@ -744,37 +777,39 @@ Samtec_QSE-014-xx-x-D-DP_P0.8mm_Vertical: &QSE-014-xx-x-D-DP
       [drawing](http://suddendocs.samtec.com/prints/qse-xxx-xx-xxx-d-dp-xxx-xxxxx-mkt.pdf),
       [footprint](http://suddendocs.samtec.com/prints/qse-xxx-xx-x-d-dp-xxx-footprint.pdf)
   layout: {type: 'Socket', width: 21.27, height: 7.24}
-  banks: {n: 1, diff: 1, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 1, diff: 1, space: 20.0, width: 16.34, height: 3.8}
   pads: *QSE_pads
 
 Samtec_QSE-014-xx-x-D-DP-A_P0.8mm_Vertical:
   <<: *QSE-014-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 20.13, y: -2.67}
+    - {drill: 1.0, space: 20.13, y: 2.67}
 
-# QSE family; 2 banks; differential
+# QSE-DP family; 2 banks; differential
 Samtec_QSE-028-xx-x-D-DP_P0.8mm_Vertical: &QSE-028-xx-x-D-DP
+  library: 'Connector_Samtec_QStrip'
   meta: *QSE-DP_meta
   layout: {type: 'Socket', width: 41.28, height: 7.24}
-  banks: {n: 2, diff: 2, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 2, diff: 2, space: 20.0, width: 16.34, height: 3.8}
   pads: *QSE_pads
 
 Samtec_QSE-028-xx-x-D-DP-A_P0.8mm_Vertical:
   <<: *QSE-028-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 40.13, y: -2.67}
+    - {drill: 1.0, space: 40.13, y: 2.67}
 
-# QSE family; 3 banks; differential
+# QSE-DP family; 3 banks; differential
 Samtec_QSE-042-xx-x-D-DP_P0.8mm_Vertical: &QSE-042-xx-x-D-DP
+  library: 'Connector_Samtec_QStrip'
   meta: *QSE-DP_meta
   layout: {type: 'Socket', width: 61.28, height: 7.24}
-  banks: {n: 3, diff: 3, space: 20.0, width: 16.0, height: 3.8}
+  banks: {n: 3, diff: 3, space: 20.0, width: 16.34, height: 3.8}
   pads: *QSE_pads
 
 Samtec_QSE-042-xx-x-D-DP-A_P0.8mm_Vertical:
   <<: *QSE-042-xx-x-D-DP
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.02, space: 60.13, y: -2.67}
+    - {drill: 1.0, space: 60.13, y: 2.67}

From 3fb44b2298a330626f8a69322f2d9e9604bb7078 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Fri, 7 Aug 2020 19:55:05 -0700
Subject: [PATCH 40/62] BasicBladeAndBeam_Vertical: + Add BTS footprint specs

---
 .../BasicBladeAndBeam_Vertical.yaml           | 62 ++++++++++++++++++-
 1 file changed, 61 insertions(+), 1 deletion(-)

diff --git a/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml b/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml
index 3f787a4d6..f1e986e88 100644
--- a/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml
@@ -192,6 +192,67 @@ Samtec_BSH-150-xx-x-D-A_P0.5mm_Vertical:
 
 ################################################################################
 # BTS family (0.635mm terminal)
+Samtec_BTS-025-xx-x-D_P0.5mm_Vertical: &BTS-025-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: &BTS_meta
+    description: >-
+      Samtec {pn:s} {pitch:1.3f}mm Basic Blade & Beam {type:s}; {pins:d} pins;
+      {ds:s}
+    tags: 'connector Samtec BTS mezzanine terminal vertical'
+    datasheet: >-
+      
+  layout: {type: 'Terminal', width: 20.0, height: 5.97}
+  banks: {n: 1, diff: 0, space: 0, width: 16.89, height: 4.0}
+  pads:
+    signal: {n: 50, pitch: 0.635, y: 3.086, width: 0.432, height: 1.45}
+
+Samtec_BTS-025-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BTS-025-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: -2.03, space: 18.48}
+
+Samtec_BTS-050-xx-x-D_P0.5mm_Vertical: &BTS-050-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BTH_meta
+  layout: {type: 'Terminal', width: 35.88, height: 5.97}
+  banks: {n: 1, diff: 0, space: 0, width: 32.77, height: 4.0}
+  pads:
+    signal: {n: 100, pitch: 0.635, y: 3.086, width: 0.305, height: 1.45}
+
+Samtec_BTS-050-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BTS-050-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: -2.03, space: 34.35}
+
+Samtec_BTS-075-xx-x-D_P0.5mm_Vertical: &BTS-075-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BTH_meta
+  layout: {type: 'Terminal', width: 51.755, height: 5.97}
+  banks: {n: 1, diff: 0, space: 0, width: 48.65, height: 4.0}
+  pads:
+    signal: {n: 150, pitch: 0.635, y: 3.086, width: 0.305, height: 1.45}
+
+Samtec_BTS-075-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BTS-075-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: -2.03, space: 50.23}
+
+Samtec_BTS-100-xx-x-D_P0.5mm_Vertical: &BTS-100-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BTH_meta
+  layout: {type: 'Terminal', width: 67.63, height: 5.97}
+  banks: {n: 1, diff: 0, space: 0, width: 64.52, height: 4.0}
+  pads:
+    signal: {n: 200, pitch: 0.635, y: 3.086, width: 0.305, height: 1.45}
+
+Samtec_BTS-100-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BTS-100-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: -2.03, space: 66.10}
 
 ################################################################################
 # BSS family (0.635mm socket)
@@ -201,4 +262,3 @@ Samtec_BSH-150-xx-x-D-A_P0.5mm_Vertical:
 
 ################################################################################
 # BSE family (0.8mm socket)
-

From 11c481a9fcf0c5b37f1e2baea9b7117c040d4d2d Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sun, 9 Aug 2020 07:17:42 -0700
Subject: [PATCH 41/62] BasicBladeAndBeam_Vertical: + Continue adding connector
 specifications

QStrip_Vertical, RazorBeam_Vertical:
+ Metadata update
---
 .../BasicBladeAndBeam_Vertical.yaml           | 42 +++++++++--
 .../Connector_Samtec/QStrip_Vertical.yaml     | 75 ++++++++++---------
 .../Connector_Samtec/RazorBeam_Vertical.yaml  | 16 ++--
 3 files changed, 85 insertions(+), 48 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml b/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml
index f1e986e88..6f3949842 100644
--- a/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml
@@ -15,10 +15,12 @@ Samtec_BTH-030-xx-x-D_P0.5mm_Vertical: &BTH-030-xx-x-D
   library: 'Connector_Samtec_BasicBladeAndBeam'
   meta: &BTH_meta
     description: &desc >-
-      Samtec {pn:s} {pitch:1.2f}mm Basic Blade & Beam {type:s}; {pins:d} pins;
-      {ds:s}
+      Samtec {pn:s} {pitch:1.2f}mm Basic Blade & Beam {type:s}; {pins:d} pins
+      ({ds:s}); generated with kicad-footprint-generator
     tags: 'connector Samtec BTH mezzanine terminal vertical'
     datasheet: >-
+      http://suddendocs.samtec.com/prints/bth-xxx-xx-x-d-xx-mkt.pdf,
+      http://suddendocs.samtec.com/prints/bth-xxx-xx-x-d-xx-footprint.pdf
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
   banks: {n: 1, diff: 0, space: 0, width: 16.88, height: 4.0}
   pads:
@@ -108,12 +110,13 @@ Samtec_BSH-030-xx-x-D_P0.5mm_Vertical: &BSH-030-xx-x-D
     description: *desc
     tags: 'connector Samtec BSH mezzanine socket vertical'
     datasheet: >-
+      http://suddendocs.samtec.com/prints/bsh-xxx-01-x-d-xx-xx-mkt.pdf,
+      http://suddendocs.samtec.com/prints/bsh-xxx-01-x-d-xx-xx-footprint.pdf
   layout: {type: 'Socket', width: 21.3, height: 7.24}
   banks: {n: 1, diff: 0, space: 0, width: 16.6, height: 3.8}
   pads:
     signal: {n: 60, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
 
-
 Samtec_BSH-030-xx-x-D-A_P0.5mm_Vertical:
   <<: *BSH-030-xx-x-D
   add-tags: 'alignment-pins'
@@ -196,11 +199,12 @@ Samtec_BTS-025-xx-x-D_P0.5mm_Vertical: &BTS-025-xx-x-D
   library: 'Connector_Samtec_BasicBladeAndBeam'
   meta: &BTS_meta
     description: >-
-      Samtec {pn:s} {pitch:1.3f}mm Basic Blade & Beam {type:s}; {pins:d} pins;
-      {ds:s}
+      Samtec {pn:s} {pitch:1.3f}mm Basic Blade & Beam {type:s}; {pins:d} pins
+      ({ds:s}); generated with kicad-footprint-generator
     tags: 'connector Samtec BTS mezzanine terminal vertical'
     datasheet: >-
-      
+      http://suddendocs.samtec.com/prints/bts-xxx-xx-x-d-xx-mkt.pdf,
+      http://suddendocs.samtec.com/prints/bts-d.pdf
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
   banks: {n: 1, diff: 0, space: 0, width: 16.89, height: 4.0}
   pads:
@@ -256,9 +260,35 @@ Samtec_BTS-100-xx-x-D-A_P0.5mm_Vertical:
 
 ################################################################################
 # BSS family (0.635mm socket)
+Samtec_BSS-025-xx-x-D_P0.5mm_Vertical: &BSS-025-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: &BSS_meta
+    description: *desc
+    tags: 'connector Samtec BSS mezzanine socket vertical'
+    datasheet: >-
+      http://suddendocs.samtec.com/prints/bss-xxx-01-x-d-xx-mkt.pdf,
+      http://suddendocs.samtec.com/prints/bss-xxx-01-x-d-xx-footprint.pdf
+  layout: {type: 'Socket', width: 21.3, height: 7.24}
+  banks: {n: 1, diff: 0, space: 0, width: 16.6, height: 3.8}
+  pads:
+    signal: {n: 50, pitch: 0.635, y: 2.865, width: 0.279, height: 2.27}
+
+Samtec_BSS-025-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BSS-025-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, space: 20.13, y: 2.67}
 
 ################################################################################
 # BTE family (0.8mm terminal)
 
+datasheet: >-
+  http://suddendocs.samtec.com/prints/bte-xxx-xx-x-d-xx-mkt.pdf,
+  http://suddendocs.samtec.com/prints/bte-xxx-xx-x-d-xx-footprint.pdf
+
 ################################################################################
 # BSE family (0.8mm socket)
+
+datasheet: >-
+  http://suddendocs.samtec.com/prints/bse-xxx-01-x-d-xx-mkt.pdf,
+  http://suddendocs.samtec.com/prints/bse-xxx-01-x-d-xx-footprint.pdf
diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
index f53767255..50d8d57ea 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
@@ -7,8 +7,8 @@
 # configurations are denoted with a double-comment followed by a space ("## ").
 #
 # Links:
-#   - [Q Strip](https://www.samtec.com/connectors/high-speed-board-to-board/mezzanine/qstrip)
-#   - [Q Pairs](https://www.samtec.com/connectors/high-speed-board-to-board/mezzanine/qpairs)
+# - https://www.samtec.com/connectors/high-speed-board-to-board/mezzanine/qstrip
+# - https://www.samtec.com/connectors/high-speed-board-to-board/mezzanine/qpairs
 # 
 
 ################################################################################
@@ -18,11 +18,12 @@ Samtec_QTH-030-xx-x-D_P0.5mm_Vertical: &QTH-030-xx-x-D
   meta: &QTH_meta
     description: &QStrip_desc >-
       Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip;
-      {banks:d} bank(s), {pins:d} pins/bank; {ds:s}
+      {banks:d} bank(s), {pins:d} pins/bank ({ds:s});
+      generated with kicad-footprint-generator
     tags: 'connector Samtec QStrip QTH mezzanine terminal vertical single-ended'
     datasheet: >-
-      [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-mkt.pdf),
-      [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf)
+      http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-mkt.pdf,
+      http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
   banks: {n: 1, diff: 0, space: 20.0, width: 16.88, height: 4.0}
   pads: &QTH_pads
@@ -101,11 +102,12 @@ Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical: &QTH-020-xx-x-D-DP
   meta: &QTH-DP_meta
     description: &QPairs_desc >-
       Samtec {pn:s} {pitch:1.2f}mm Q Pairs High-Speed Ground Plane {type:s} Strip,
-      Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank; {ds:s}
+      Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank ({ds:s});
+      generated with kicad-footprint-generator
     tags: 'connector Samtec QPairs QTH mezzanine terminal vertical differential'
     datasheet: >-
-      [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-mkt.pdf),
-      [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf)
+      http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-mkt.pdf,
+      http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
   banks: {n: 1, diff: 1, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTH_pads
@@ -179,13 +181,13 @@ Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical:
   library: 'Connector_Samtec'
   meta:
     pn: 'ASP-122952-01'
-    datasheet: '[drawing/footprint](http://suddendocs.samtec.com/prints/asp-122952-01-mkt.pdf)'
+    description: >-
+      Samtec {pn:s} HSMC Card {type:s}; modified QTH-090-01-L-D-A, Bank 1
+      differential ({ds:s}); generated with kicad-footprint-generator
     tags: >-
-      connector Samtec QSeries QStrip QPairs HSMC card terminal mezzanine
+      connector Samtec QStrip QPairs HSMC card terminal mezzanine
       vertical single-ended differential alignment-pins application-specific
-    description: >-
-      Samtec {pn:s} HSMC Card {type:s}; modified QTH-090-01-L-D-A,
-      Bank 1 differential; {ds:s}
+    datasheet: 'http://suddendocs.samtec.com/prints/asp-122952-01-mkt.pdf'
   layout: {type: 'Terminal', width: 60.0, height: 5.97}
   banks: {n: 3, diff: 1, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTH_pads
@@ -200,8 +202,8 @@ Samtec_QSH-030-xx-x-D_P0.5mm_Vertical: &QSH-030-xx-x-D
     description: *QStrip_desc
     tags: 'connector Samtec QStrip QSH mezzanine socket vertical single-ended'
     datasheet: >-
-      [drawing](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-xxx-mkt.pdf),
-      [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-xx-footprint.pdf)
+      http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-xxx-mkt.pdf,
+      http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-xx-footprint.pdf
   layout: {type: 'Socket', width: 21.31, height: 7.24}
   banks: {n: 1, diff: 0, space: 20.0, width: 17.14, height: 3.8}
   pads: &QSH_pads
@@ -270,8 +272,8 @@ Samtec_QSH-020-xx-x-D-DP_P0.5mm_Vertical: &QSH-020-xx-x-D-DP
     description: *QPairs_desc
     tags: 'connector Samtec QPairs QSH mezzanine socket vertical differential'
     datasheet: >-
-      [drawing](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-dp-xxx-mkt.pdf),
-      [footprint](http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-dp-xx-footprint.pdf)
+      http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-dp-xxx-mkt.pdf,
+      http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-dp-xx-footprint.pdf
   layout: {type: 'Socket', width: 21.31, height: 7.24}
   banks: {n: 1, diff: 1, space: 20.0, width: 17.14, height: 3.8}
   pads: *QSH_pads
@@ -329,13 +331,14 @@ Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
   library: 'Connector_Samtec'
   meta:
     pn: 'ASP-122953-01'
-    datasheet: '[drawing/footprint](http://suddendocs.samtec.com/prints/asp-122953-01-mkt.pdf)'
+    description: >-
+      Samtec {pn:s} HSMC Host {type:s}; modified QSH-090-01-L-D-A, Bank 1
+      differential ({ds:s}); generated with kicad-footprint-generator
     tags: >-
       connector Samtec QSeries QStrip QPairs HSMC host socket mezzanine
       vertical single-ended differential application-specific
-    description: >-
-      Samtec {pn:s} HSMC Host {type:s}; modified QSH-090-01-L-D-A,
       Bank 1 differential; {ds:s}
+    datasheet: 'http://suddendocs.samtec.com/prints/asp-122953-01-mkt.pdf'
   layout: {type: 'Socket', width: 61.38, height: 7.24}
   banks: {n: 3, diff: 1, space: 20.0, width: 17.14, height: 3.8}
   pads: *QSH_pads
@@ -350,8 +353,8 @@ Samtec_QTS-025-xx-x-D_P0.635mm_Vertical: &QTS-025-xx-x-D
     description: *QStrip_desc
     tags: 'connector Samtec QStrip QTS mezzanine terminal vertical'
     datasheet: >-
-      [drawing](http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-xxx-mkt.pdf),
-      [footprint](http://suddendocs.samtec.com/prints/qts-xxx-xx-x-d-xx-footprint.pdf)
+      http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-xxx-mkt.pdf,
+      http://suddendocs.samtec.com/prints/qts-xxx-xx-x-d-xx-footprint.pdf
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
   banks: {n: 1, diff: 0, space: 20.0, width: 16.88, height: 4.0}
   pads: &QTS_pads
@@ -401,8 +404,8 @@ Samtec_QTS-016-xx-x-D-DP_P0.635mm_Vertical: &QTS-016-xx-x-D-DP
     description: *QPairs_desc
     tags: 'connector Samtec QPairs QTS mezzanine terminal vertical differential'
     datasheet: >-
-      [drawing](http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-dp-xx-mkt.pdf),
-      [footprint](http://suddendocs.samtec.com/prints/qts-xxx-xx-x-d-dp-xx-footprint.pdf)
+      http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-dp-xx-mkt.pdf,
+      http://suddendocs.samtec.com/prints/qts-xxx-xx-x-d-dp-xx-footprint.pdf
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
   banks: {n: 1, diff: 1, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTS_pads
@@ -467,8 +470,8 @@ Samtec_QSS-025-xx-x-D_P0.635mm_Vertical: &QSS-025-xx-x-D
     description: *QStrip_desc
     tags: 'connector Samtec QStrip QSS mezzanine socket vertical single-ended'
     datasheet: >-
-      [drawing](http://suddendocs.samtec.com/prints/qss-xxx-xx-xxx-d-xxx-mkt.pdf),
-      [footprint](http://suddendocs.samtec.com/prints/qss-xxx-xx-x-d-xx-footprint.pdf)
+      http://suddendocs.samtec.com/prints/qss-xxx-xx-xxx-d-xxx-mkt.pdf,
+      http://suddendocs.samtec.com/prints/qss-xxx-xx-x-d-xx-footprint.pdf
   layout: {type: 'Socket', width: 21.27, height: 7.24}
   banks: {n: 1, diff: 0, space: 20.0, width: 16.64, height: 3.66}
   pads: &QSS_pads
@@ -518,8 +521,8 @@ Samtec_QSS-016-xx-x-D-DP_P0.635mm_Vertical: &QSS-016-xx-x-D-DP
     description: *QPairs_desc
     tags: 'connector Samtec QPairs QSS mezzanine socket vertical differential'
     datasheet: >-
-      [drawing](http://suddendocs.samtec.com/prints/qss-xxx-xx-xxx-d-dp-xxx-mkt.pdf),
-      [footprint](http://suddendocs.samtec.com/prints/qss-xxx-xx-x-d-dp-xx-footprint.pdf)
+      http://suddendocs.samtec.com/prints/qss-xxx-xx-xxx-d-dp-xxx-mkt.pdf,
+      http://suddendocs.samtec.com/prints/qss-xxx-xx-x-d-dp-xx-footprint.pdf
   layout: {type: 'Socket', width: 21.27, height: 7.24}
   banks: {n: 1, diff: 1, space: 20.0, width: 16.64, height: 3.66}
   pads: *QSS_pads
@@ -584,8 +587,8 @@ Samtec_QTE-020-xx-x-D_P0.8mm_Vertical: &QTE-020-xx-x-D
     description: *QStrip_desc
     tags: 'connector Samtec QStrip QTE mezzanine terminal vertical'
     datasheet: >-
-      [drawing](http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-xxx-mkt.pdf),
-      [footprint](http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-xxx-footprint.pdf)
+      http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-xxx-mkt.pdf,
+      http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-xxx-footprint.pdf
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
   banks: {n: 1, diff: 0, space: 20.0, width: 16.88, height: 4.0}
   pads: &QTE_pads
@@ -651,8 +654,8 @@ Samtec_QTE-014-xx-x-D-DP_P0.8mm_Vertical: &QTE-014-xx-x-D-DP
     description: *QPairs_desc
     tags: 'connector Samtec QPairs QTE mezzanine terminal vertical differential'
     datasheet: >-
-      [drawing](http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-dp-xxx-mkt.pdf),
-      [footprint](http://suddendocs.samtec.com/prints/qte-xxx-xx-x-d-dp-xx-footprint.pdf)
+      http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-dp-xxx-mkt.pdf,
+      http://suddendocs.samtec.com/prints/qte-xxx-xx-x-d-dp-xx-footprint.pdf
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
   banks: {n: 1, diff: 1, space: 20.0, width: 16.88, height: 4.0}
   pads: *QTE_pads
@@ -715,8 +718,8 @@ Samtec_QSE-020-xx-x-D_P0.8mm_Vertical: &QSE-020-xx-x-D
     description: *QStrip_desc
     tags: 'connector Samtec QStrip QSE mezzanine socket vertical single-ended'
     datasheet: >-
-      [drawing](http://suddendocs.samtec.com/prints/qse-xxx-xx-xxx-d-xxx-mkt.pdf),
-      [footprint](http://suddendocs.samtec.com/prints/qse-xxx-xx-x-d-xx-footprint.pdf)
+      http://suddendocs.samtec.com/prints/qse-xxx-xx-xxx-d-xxx-mkt.pdf,
+      http://suddendocs.samtec.com/prints/qse-xxx-xx-x-d-xx-footprint.pdf
   layout: {type: 'Socket', width: 21.27, height: 7.24}
   banks: {n: 1, diff: 0, space: 20.0, width: 16.34, height: 3.8}
   pads: &QSE_pads
@@ -774,8 +777,8 @@ Samtec_QSE-014-xx-x-D-DP_P0.8mm_Vertical: &QSE-014-xx-x-D-DP
     description: *QPairs_desc
     tags: 'connector Samtec QPairs QSE mezzanine socket vertical differential'
     datasheet: >-
-      [drawing](http://suddendocs.samtec.com/prints/qse-xxx-xx-xxx-d-dp-xxx-xxxxx-mkt.pdf),
-      [footprint](http://suddendocs.samtec.com/prints/qse-xxx-xx-x-d-dp-xxx-footprint.pdf)
+      http://suddendocs.samtec.com/prints/qse-xxx-xx-xxx-d-dp-xxx-xxxxx-mkt.pdf,
+      http://suddendocs.samtec.com/prints/qse-xxx-xx-x-d-dp-xxx-footprint.pdf
   layout: {type: 'Socket', width: 21.27, height: 7.24}
   banks: {n: 1, diff: 1, space: 20.0, width: 16.34, height: 3.8}
   pads: *QSE_pads
diff --git a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml
index a0dbe11d9..4d90877da 100644
--- a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.yaml
@@ -2,11 +2,13 @@
 # LSHM family
 Samtec_LSHM-105-xx.x-x-DV-A-N_Vertical: &LSHM-105
   meta: &LSHM_meta
-    description: 'Samtec {pn:s} {pitch:1.2f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip; {ds:s}'
+    description: >-
+      Samtec {pn:s} {pitch:1.2f}mm Razor Beam High-Speed Hermaphroditic
+      Terminal/Socket Strip ({ds:s}); generated with kicad-footprint-generator
     tags: 'connector Samtec RazorBeam LSHM self-mating terminal socket vertical'
     datasheet: >-
-     [drawing](http://suddendocs.samtec.com/prints/lshm-1xx-xx.x-xxx-dv-a-x-x-xx-mkt.pdf),
-     [footprint](http://suddendocs.samtec.com/prints/lshm-1xx-xx.x-x-dv-a-x-x-tr-footprint.pdf)
+     http://suddendocs.samtec.com/prints/lshm-1xx-xx.x-xxx-dv-a-x-x-xx-mkt.pdf,
+     http://suddendocs.samtec.com/prints/lshm-1xx-xx.x-x-dv-a-x-x-tr-footprint.pdf
   pads: &LSHM_pads {pitch: 0.5, y: 1.85, width: 0.3, height: 1.5}
   layout: {width: 7.2, height: 4.98}
   pins: 10
@@ -160,11 +162,13 @@ Samtec_LSHM-150-xx.x-x-DV-A-S_Vertical:
 # LSEM family
 Samtec_LSEM-120-xx.x-x-DV-A-N_Vertical:
   meta: &LSEM_meta
-    description: 'Samtec {pn:s} {pitch:1.2f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip; {ds:s}'
+    description: >-
+      Samtec {pn:s} {pitch:1.2f}mm Razor Beam High-Speed Hermaphroditic
+      Terminal/Socket Strip ({ds:s}); generated with kicad-footprint-generator
     tags: 'connector Samtec RazorBeam LSEM self-mating terminal socket vertical'
     datasheet: >-
-     [drawing](http://suddendocs.samtec.com/prints/lsem-1xx-xx.x-x-dv-a-x-xx-tr-mkt.pdf),
-     [footprint](http://suddendocs.samtec.com/prints/lsem-1xx-xx.x-x-dv-a-x-xx-tr%20footprint.pdf)
+     http://suddendocs.samtec.com/prints/lsem-1xx-xx.x-x-dv-a-x-xx-tr-mkt.pdf,
+     http://suddendocs.samtec.com/prints/lsem-1xx-xx.x-x-dv-a-x-xx-tr%20footprint.pdf
   pads: &LSEM_pads {pitch: 0.8, y: 1.85, width: 0.38, height: 1.65}
   layout: {width: 20.4, height: 4.98}
   pins: 40

From 718b30460237751b9536df05ba9e9845abe4f4c9 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sun, 9 Aug 2020 14:13:15 -0700
Subject: [PATCH 42/62] BasicBladeAndBeam_Vertical: + BSH family + Correct
 dimensions

---
 .../BasicBladeAndBeam_Vertical.yaml           | 304 +++++++++++++++---
 1 file changed, 258 insertions(+), 46 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml b/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml
index 6f3949842..cc45f4ce8 100644
--- a/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml
@@ -22,7 +22,7 @@ Samtec_BTH-030-xx-x-D_P0.5mm_Vertical: &BTH-030-xx-x-D
       http://suddendocs.samtec.com/prints/bth-xxx-xx-x-d-xx-mkt.pdf,
       http://suddendocs.samtec.com/prints/bth-xxx-xx-x-d-xx-footprint.pdf
   layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 16.88, height: 4.0}
+  banks: {n: 1, diff: 0, space: 0, width: 16.888, height: 4.0}
   pads:
     signal: {n: 60, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
 
@@ -30,13 +30,13 @@ Samtec_BTH-030-xx-x-D-A_P0.5mm_Vertical:
   <<: *BTH-030-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.0, y: -2.03, space: 18.48}
+    - {drill: 1.0, y: -2.03, space: 18.475}
  
 Samtec_BTH-050-xx-x-D_P0.5mm_Vertical: &BTH-050-xx-x-D
   library: 'Connector_Samtec_BasicBladeAndBeam'
   meta: *BTH_meta
   layout: {type: 'Terminal', width: 30.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 26.88, height: 4.0}
+  banks: {n: 1, diff: 0, space: 0, width: 26.888, height: 4.0}
   pads:
     signal: {n: 100, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
 
@@ -44,13 +44,13 @@ Samtec_BTH-050-xx-x-D-A_P0.5mm_Vertical:
   <<: *BTH-050-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.0, y: -2.03, space: 28.48}
+    - {drill: 1.0, y: -2.03, space: 28.475}
 
 Samtec_BTH-060-xx-x-D_P0.5mm_Vertical: &BTH-060-xx-x-D
   library: 'Connector_Samtec_BasicBladeAndBeam'
   meta: *BTH_meta
   layout: {type: 'Terminal', width: 35.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 31.88, height: 4.0}
+  banks: {n: 1, diff: 0, space: 0, width: 31.888, height: 4.0}
   pads:
     signal: {n: 120, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
 
@@ -58,13 +58,13 @@ Samtec_BTH-060-xx-x-D-A_P0.5mm_Vertical:
   <<: *BTH-060-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.0, y: -2.03, space: 33.48}
+    - {drill: 1.0, y: -2.03, space: 33.475}
 
 Samtec_BTH-090-xx-x-D_P0.5mm_Vertical: &BTH-090-xx-x-D
   library: 'Connector_Samtec_BasicBladeAndBeam'
   meta: *BTH_meta
   layout: {type: 'Terminal', width: 50.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 46.88, height: 4.0}
+  banks: {n: 1, diff: 0, space: 0, width: 46.888, height: 4.0}
   pads:
     signal: {n: 180, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
 
@@ -72,13 +72,13 @@ Samtec_BTH-090-xx-x-D-A_P0.5mm_Vertical:
   <<: *BTH-090-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.0, y: -2.03, space: 48.48}
+    - {drill: 1.0, y: -2.03, space: 48.475}
 
 Samtec_BTH-120-xx-x-D_P0.5mm_Vertical: &BTH-120-xx-x-D
   library: 'Connector_Samtec_BasicBladeAndBeam'
   meta: *BTH_meta
   layout: {type: 'Terminal', width: 65.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 61.88, height: 4.0}
+  banks: {n: 1, diff: 0, space: 0, width: 61.888, height: 4.0}
   pads:
     signal: {n: 240, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
 
@@ -86,13 +86,13 @@ Samtec_BTH-120-xx-x-D-A_P0.5mm_Vertical:
   <<: *BTH-120-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.0, y: -2.03, space: 63.48}
+    - {drill: 1.0, y: -2.03, space: 63.475}
 
 Samtec_BTH-150-xx-x-D_P0.5mm_Vertical: &BTH-150-xx-x-D
   library: 'Connector_Samtec_BasicBladeAndBeam'
   meta: *BTH_meta
   layout: {type: 'Terminal', width: 80.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 76.88, height: 4.0}
+  banks: {n: 1, diff: 0, space: 0, width: 76.888, height: 4.0}
   pads:
     signal: {n: 300, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
 
@@ -100,7 +100,7 @@ Samtec_BTH-150-xx-x-D-A_P0.5mm_Vertical:
   <<: *BTH-150-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.0, y: -2.03, space: 78.48}
+    - {drill: 1.0, y: -2.03, space: 78.475}
 
 ################################################################################
 # BSH family (0.5mm socket)
@@ -121,13 +121,13 @@ Samtec_BSH-030-xx-x-D-A_P0.5mm_Vertical:
   <<: *BSH-030-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.0, space: 20.13, y: 2.67}
+    - {drill: 1.0, y: 2.67, space: 20.126}
 
 Samtec_BSH-050-xx-x-D_P0.5mm_Vertical: &BSH-050-xx-x-D
   library: 'Connector_Samtec_BasicBladeAndBeam'
   meta: *BSH_meta
   layout: {type: 'Socket', width: 31.3, height: 7.24}
-  banks: {n: 1, diff: 0, space: 20.0, width: 26.6, height: 3.8}
+  banks: {n: 1, diff: 0, space: 0, width: 26.6, height: 3.8}
   pads:
     signal: {n: 100, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
 
@@ -135,13 +135,13 @@ Samtec_BSH-050-xx-x-D-A_P0.5mm_Vertical:
   <<: *BSH-050-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.0, space: 30.13, y: 2.67}
+    - {drill: 1.0, y: 2.67, space: 30.126}
 
 Samtec_BSH-060-xx-x-D_P0.5mm_Vertical: &BSH-060-xx-x-D
   library: 'Connector_Samtec_BasicBladeAndBeam'
   meta: *BSH_meta
   layout: {type: 'Socket', width: 36.3, height: 7.24}
-  banks: {n: 1, diff: 0, space: 20.0, width: 31.6, height: 3.8}
+  banks: {n: 1, diff: 0, space: 0, width: 31.6, height: 3.8}
   pads:
     signal: {n: 120, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
 
@@ -149,13 +149,13 @@ Samtec_BSH-060-xx-x-D-A_P0.5mm_Vertical:
   <<: *BSH-060-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.0, space: 35.13, y: 2.67}
+    - {drill: 1.0, y: 2.67, space: 35.126}
 
 Samtec_BSH-090-xx-x-D_P0.5mm_Vertical: &BSH-090-xx-x-D
   library: 'Connector_Samtec_BasicBladeAndBeam'
   meta: *BSH_meta
   layout: {type: 'Socket', width: 51.3, height: 7.24}
-  banks: {n: 1, diff: 0, space: 20.0, width: 46.6, height: 3.8}
+  banks: {n: 1, diff: 0, space: 0, width: 46.6, height: 3.8}
   pads:
     signal: {n: 180, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
 
@@ -163,13 +163,13 @@ Samtec_BSH-090-xx-x-D-A_P0.5mm_Vertical:
   <<: *BSH-090-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.0, space: 50.13, y: 2.67}
+    - {drill: 1.0, y: 2.67, space: 50.126}
 
 Samtec_BSH-120-xx-x-D_P0.5mm_Vertical: &BSH-120-xx-x-D
   library: 'Connector_Samtec_BasicBladeAndBeam'
   meta: *BSH_meta
   layout: {type: 'Socket', width: 66.3, height: 7.24}
-  banks: {n: 1, diff: 0, space: 20.0, width: 61.6, height: 3.8}
+  banks: {n: 1, diff: 0, space: 0, width: 61.6, height: 3.8}
   pads:
     signal: {n: 240, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
 
@@ -177,13 +177,13 @@ Samtec_BSH-120-xx-x-D-A_P0.5mm_Vertical:
   <<: *BSH-120-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.0, space: 65.13, y: 2.67}
+    - {drill: 1.0, y: 2.67, space: 65.126}
 
 Samtec_BSH-150-xx-x-D_P0.5mm_Vertical: &BSH-150-xx-x-D
   library: 'Connector_Samtec_BasicBladeAndBeam'
   meta: *BSH_meta
   layout: {type: 'Socket', width: 81.3, height: 7.24}
-  banks: {n: 1, diff: 0, space: 20.0, width: 76.6, height: 3.8}
+  banks: {n: 1, diff: 0, space: 0, width: 76.6, height: 3.8}
   pads:
     signal: {n: 300, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
 
@@ -191,7 +191,7 @@ Samtec_BSH-150-xx-x-D-A_P0.5mm_Vertical:
   <<: *BSH-150-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.0, space: 80.13, y: 2.67}
+    - {drill: 1.0, y: 2.67, space: 80.126}
 
 ################################################################################
 # BTS family (0.635mm terminal)
@@ -205,8 +205,8 @@ Samtec_BTS-025-xx-x-D_P0.5mm_Vertical: &BTS-025-xx-x-D
     datasheet: >-
       http://suddendocs.samtec.com/prints/bts-xxx-xx-x-d-xx-mkt.pdf,
       http://suddendocs.samtec.com/prints/bts-d.pdf
-  layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 16.89, height: 4.0}
+  layout: {type: 'Terminal', width: 20.005, height: 5.97}
+  banks: {n: 1, diff: 0, space: 0, width: 16.895, height: 4.0}
   pads:
     signal: {n: 50, pitch: 0.635, y: 3.086, width: 0.432, height: 1.45}
 
@@ -214,49 +214,49 @@ Samtec_BTS-025-xx-x-D-A_P0.5mm_Vertical:
   <<: *BTS-025-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.0, y: -2.03, space: 18.48}
+    - {drill: 1.0, y: -2.03, space: 18.479}
 
 Samtec_BTS-050-xx-x-D_P0.5mm_Vertical: &BTS-050-xx-x-D
   library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BTH_meta
+  meta: *BTS_meta
   layout: {type: 'Terminal', width: 35.88, height: 5.97}
   banks: {n: 1, diff: 0, space: 0, width: 32.77, height: 4.0}
   pads:
-    signal: {n: 100, pitch: 0.635, y: 3.086, width: 0.305, height: 1.45}
+    signal: {n: 100, pitch: 0.635, y: 3.086, width: 0.432, height: 1.45}
 
 Samtec_BTS-050-xx-x-D-A_P0.5mm_Vertical:
   <<: *BTS-050-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.0, y: -2.03, space: 34.35}
+    - {drill: 1.0, y: -2.03, space: 34.354}
 
 Samtec_BTS-075-xx-x-D_P0.5mm_Vertical: &BTS-075-xx-x-D
   library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BTH_meta
+  meta: *BTS_meta
   layout: {type: 'Terminal', width: 51.755, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 48.65, height: 4.0}
+  banks: {n: 1, diff: 0, space: 0, width: 48.645, height: 4.0}
   pads:
-    signal: {n: 150, pitch: 0.635, y: 3.086, width: 0.305, height: 1.45}
+    signal: {n: 150, pitch: 0.635, y: 3.086, width: 0.432, height: 1.45}
 
 Samtec_BTS-075-xx-x-D-A_P0.5mm_Vertical:
   <<: *BTS-075-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.0, y: -2.03, space: 50.23}
+    - {drill: 1.0, y: -2.03, space: 50.229}
 
 Samtec_BTS-100-xx-x-D_P0.5mm_Vertical: &BTS-100-xx-x-D
   library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BTH_meta
+  meta: *BTS_meta
   layout: {type: 'Terminal', width: 67.63, height: 5.97}
   banks: {n: 1, diff: 0, space: 0, width: 64.52, height: 4.0}
   pads:
-    signal: {n: 200, pitch: 0.635, y: 3.086, width: 0.305, height: 1.45}
+    signal: {n: 200, pitch: 0.635, y: 3.086, width: 0.432, height: 1.45}
 
 Samtec_BTS-100-xx-x-D-A_P0.5mm_Vertical:
   <<: *BTS-100-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.0, y: -2.03, space: 66.10}
+    - {drill: 1.0, y: -2.03, space: 66.104}
 
 ################################################################################
 # BSS family (0.635mm socket)
@@ -268,27 +268,239 @@ Samtec_BSS-025-xx-x-D_P0.5mm_Vertical: &BSS-025-xx-x-D
     datasheet: >-
       http://suddendocs.samtec.com/prints/bss-xxx-01-x-d-xx-mkt.pdf,
       http://suddendocs.samtec.com/prints/bss-xxx-01-x-d-xx-footprint.pdf
-  layout: {type: 'Socket', width: 21.3, height: 7.24}
-  banks: {n: 1, diff: 0, space: 0, width: 16.6, height: 3.8}
+  layout: {type: 'Socket', width: 21.273, height: 7.24}
+  banks: {n: 1, diff: 0, space: 0, width: 16.64, height: 3.81}
   pads:
-    signal: {n: 50, pitch: 0.635, y: 2.865, width: 0.279, height: 2.27}
+    signal: {n: 50, pitch: 0.635, y: 2.865, width: 0.41, height: 2.27}
 
 Samtec_BSS-025-xx-x-D-A_P0.5mm_Vertical:
   <<: *BSS-025-xx-x-D
   add-tags: 'alignment-pins'
   holes:
-    - {drill: 1.0, space: 20.13, y: 2.67}
+    - {drill: 1.0, space: 20.003, y: 2.67}
+
+Samtec_BSS-050-xx-x-D_P0.5mm_Vertical: &BSS-050-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BSS_meta
+  layout: {type: 'Socket', width: 37.148, height: 7.24}
+  banks: {n: 1, diff: 0, space: 0, width: 32.515, height: 3.81}
+  pads:
+    signal: {n: 100, pitch: 0.635, y: 2.865, width: 0.41, height: 2.27}
+
+Samtec_BSS-050-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BSS-050-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: 2.67, space: 35.878}
+
+Samtec_BSS-075-xx-x-D_P0.5mm_Vertical: &BSS-075-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BSS_meta
+  layout: {type: 'Socket', width: 53.023, height: 7.24}
+  banks: {n: 1, diff: 0, space: 0, width: 48.39, height: 3.81}
+  pads:
+    signal: {n: 150, pitch: 0.635, y: 2.865, width: 0.41, height: 2.27}
+
+Samtec_BSS-075-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BSS-075-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: 2.67, space: 51.753}
+
+Samtec_BSS-100-xx-x-D_P0.5mm_Vertical: &BSS-100-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BSS_meta
+  layout: {type: 'Socket', width: 68.898, height: 7.24}
+  banks: {n: 1, diff: 0, space: 0, width: 64.265, height: 3.81}
+  pads:
+    signal: {n: 200, pitch: 0.635, y: 2.865, width: 0.41, height: 2.27}
+
+Samtec_BSS-100-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BSS-100-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: 2.67, space: 67.628}
 
 ################################################################################
 # BTE family (0.8mm terminal)
 
-datasheet: >-
-  http://suddendocs.samtec.com/prints/bte-xxx-xx-x-d-xx-mkt.pdf,
-  http://suddendocs.samtec.com/prints/bte-xxx-xx-x-d-xx-footprint.pdf
+Samtec_BTE-020-xx-x-D_P0.5mm_Vertical: &BTE-020-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: &BTE_meta
+    description: *desc
+    tags: 'connector Samtec BTE mezzanine terminal vertical'
+    datasheet: >-
+      http://suddendocs.samtec.com/prints/bte-xxx-xx-x-d-xx-mkt.pdf,
+      http://suddendocs.samtec.com/prints/bte-xxx-xx-x-d-xx-footprint.pdf
+  layout: {type: 'Terminal', width: 20.0, height: 5.97}
+  banks: {n: 1, diff: 0, space: 0, width: 16.88, height: 4.0}
+  pads:
+    signal: {n: 40, pitch: 0.8, y: 3.086, width: 0.457, height: 1.45}
+
+Samtec_BTE-020-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BTE-020-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: -2.03, space: 18.477}
+
+Samtec_BTE-040-xx-x-D_P0.5mm_Vertical: &BTE-040-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BTE_meta
+  layout: {type: 'Terminal', width: 36.0, height: 5.97}
+  banks: {n: 1, diff: 0, space: 0, width: 32.88, height: 4.0}
+  pads:
+    signal: {n: 80, pitch: 0.8, y: 3.086, width: 0.457, height: 1.45}
+
+Samtec_BTE-040-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BTE-040-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: -2.03, space: 34.477}
+
+Samtec_BTE-060-xx-x-D_P0.5mm_Vertical: &BTE-060-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BTE_meta
+  layout: {type: 'Terminal', width: 52.0, height: 5.97}
+  banks: {n: 1, diff: 0, space: 0, width: 48.88, height: 4.0}
+  pads:
+    signal: {n: 120, pitch: 0.8, y: 3.086, width: 0.457, height: 1.45}
+
+Samtec_BTE-060-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BTE-060-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: -2.03, space: 50.477}
+
+Samtec_BTE-080-xx-x-D_P0.5mm_Vertical: &BTE-080-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BTE_meta
+  layout: {type: 'Terminal', width: 68.0, height: 5.97}
+  banks: {n: 1, diff: 0, space: 0, width: 64.88, height: 4.0}
+  pads:
+    signal: {n: 160, pitch: 0.8, y: 3.086, width: 0.457, height: 1.45}
+
+Samtec_BTE-080-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BTE-080-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: -2.03, space: 66.477}
+
+Samtec_BTE-100-xx-x-D_P0.5mm_Vertical: &BTE-100-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BTE_meta
+  layout: {type: 'Terminal', width: 84.0, height: 5.97}
+  banks: {n: 1, diff: 0, space: 0, width: 80.88, height: 4.0}
+  pads:
+    signal: {n: 200, pitch: 0.8, y: 3.086, width: 0.457, height: 1.45}
+
+Samtec_BTE-100-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BTE-100-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: -2.03, space: 82.477}
+
+Samtec_BTE-120-xx-x-D_P0.5mm_Vertical: &BTE-120-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BTE_meta
+  layout: {type: 'Terminal', width: 100.0, height: 5.97}
+  banks: {n: 1, diff: 0, space: 0, width: 96.88, height: 4.0}
+  pads:
+    signal: {n: 240, pitch: 0.8, y: 3.086, width: 0.457, height: 1.45}
+
+Samtec_BTE-120-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BTE-120-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: -2.03, space: 98.477}
 
 ################################################################################
 # BSE family (0.8mm socket)
 
-datasheet: >-
-  http://suddendocs.samtec.com/prints/bse-xxx-01-x-d-xx-mkt.pdf,
-  http://suddendocs.samtec.com/prints/bse-xxx-01-x-d-xx-footprint.pdf
+Samtec_BSE-020-xx-x-D_P0.5mm_Vertical: &BSE-020-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: &BSE_meta
+    description: *desc
+    tags: 'connector Samtec BSE mezzanine socket vertical'
+    datasheet: >-
+      http://suddendocs.samtec.com/prints/bse-xxx-01-x-d-xx-mkt.pdf,
+      http://suddendocs.samtec.com/prints/bse-xxx-01-x-d-xx-footprint.pdf
+  layout: {type: 'Socket', width: 21.27, height: 7.239}
+  banks: {n: 1, diff: 0, space: 0, width: 16.636, height: 3.81}
+  pads:
+    signal: {n: 40, pitch: 0.8, y: 2.865, width: 0.41, height: 2.273}
+
+Samtec_BSE-020-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BSE-020-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: 2.67, space: 20.128}
+
+Samtec_BSE-040-xx-x-D_P0.5mm_Vertical: &BSE-040-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BSE_meta
+  layout: {type: 'Socket', width: 37.27, height: 7.239}
+  banks: {n: 1, diff: 0, space: 0, width: 32.636, height: 3.81}
+  pads:
+    signal: {n: 80, pitch: 0.8, y: 2.865, width: 0.41, height: 2.273}
+
+Samtec_BSE-040-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BSE-040-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: 2.67, space: 36.128}
+
+Samtec_BSE-060-xx-x-D_P0.5mm_Vertical: &BSE-060-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BSE_meta
+  layout: {type: 'Socket', width: 53.27, height: 7.239}
+  banks: {n: 1, diff: 0, space: 0, width: 48.636, height: 3.81}
+  pads:
+    signal: {n: 120, pitch: 0.8, y: 2.865, width: 0.41, height: 2.273}
+
+Samtec_BSE-060-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BSE-060-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: 2.67, space: 52.128}
+
+Samtec_BSE-080-xx-x-D_P0.5mm_Vertical: &BSE-080-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BSE_meta
+  layout: {type: 'Socket', width: 69.27, height: 7.239}
+  banks: {n: 1, diff: 0, space: 0, width: 64.636, height: 3.81}
+  pads:
+    signal: {n: 160, pitch: 0.8, y: 2.865, width: 0.41, height: 2.273}
+
+Samtec_BSE-080-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BSE-080-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: 2.67, space: 68.128}
+
+Samtec_BSE-100-xx-x-D_P0.5mm_Vertical: &BSE-100-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BSE_meta
+  layout: {type: 'Socket', width: 85.27, height: 7.239}
+  banks: {n: 1, diff: 0, space: 0, width: 80.636, height: 3.81}
+  pads:
+    signal: {n: 200, pitch: 0.8, y: 2.865, width: 0.41, height: 2.273}
+
+Samtec_BSE-100-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BSE-100-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: 2.67, space: 84.128}
+
+Samtec_BSE-120-xx-x-D_P0.5mm_Vertical: &BSE-120-xx-x-D
+  library: 'Connector_Samtec_BasicBladeAndBeam'
+  meta: *BSE_meta
+  layout: {type: 'Socket', width: 101.27, height: 7.239}
+  banks: {n: 1, diff: 0, space: 0, width: 96.636, height: 3.81}
+  pads:
+    signal: {n: 240, pitch: 0.8, y: 2.865, width: 0.41, height: 2.273}
+
+Samtec_BSE-120-xx-x-D-A_P0.5mm_Vertical:
+  <<: *BSE-120-xx-x-D
+  add-tags: 'alignment-pins'
+  holes:
+    - {drill: 1.0, y: 2.67, space: 100.128}

From c03d287ff67c2c3fb1b183b1d9c8c8ea8f882bac Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sat, 22 Aug 2020 15:53:59 -0700
Subject: [PATCH 43/62] Add dict_tools.py

---
 scripts/tools/dict_tools.py | 116 ++++++++++++++++++++++++++++++++++++
 1 file changed, 116 insertions(+)
 create mode 100644 scripts/tools/dict_tools.py

diff --git a/scripts/tools/dict_tools.py b/scripts/tools/dict_tools.py
new file mode 100644
index 000000000..e012c18a2
--- /dev/null
+++ b/scripts/tools/dict_tools.py
@@ -0,0 +1,116 @@
+import collections.abc
+import copy
+
+def dictMerge(a, b):
+    """Recursively merges the contents of two dict objects
+    
+    This function is similar to the built-in dict.update() method, but instead 
+    of clobbering the contents of one dictionary with another, it recursively
+    combines dictionaries. The result is a dictionary containing the combined
+    contents of the arguments. If both dictionaries contain a key with the same
+    name (at the same level), the value in `b` takes precedence.
+    
+    Parameters
+    ----------
+    a : dict
+        Base dictionary used as the merge destination
+    b : dict
+        Dictionary containing values to merge into `a`
+    
+    Returns
+    -------
+    Merged dictionaries (`a` with contents updated from `b`)
+    
+    Examples
+    --------
+    >>> a = {'a': 1, 'b': 2, 'c': {'a': 1, 'b': 2}}
+    >>> b = {'c': {'b': 3}, 'd': 4}
+    >>> dictMerge(a, b)
+    {'a': 1, 'b': 2, 'c': {'a': 1, 'b': 3}, 'd': 4}
+    """
+    for (k, v) in b.items():
+        if isinstance(v, collections.abc.Mapping):
+            a[k] = dictMerge(a.get(k, {}), v)
+        else:
+            a[k] = v
+    return a
+
+def dictInherit(d):
+    """Recursively merges dictionaries within a hierarchy using 'inherit' entries
+    
+    The top-level dictionary (`d`) can be thought of as a type of "namespace"
+    containing a collection of objects (sub-dictionaries). Objects within the
+    namespace may contain an 'inherit' entry, which stores the key for another
+    object within the namespace.
+    
+    Inheritance is done recursively, so it is possible to have multiple levels
+    of inheritance (object c can inherit b, which itself inherits from a). When
+    this function is executed, it iterates through every entry in `d` and runs
+    dictMerge() until all of the 'inherit' entries have been resolved. The 
+    result is applied to `d` in-place.
+    
+    Typical JSON/YAML file structure that can be processed by this function:
+    {
+      "1": {
+        "a": 1,
+        "b": {"c": 2, "d": 3, ...}
+      },
+      "2": {
+        "inherit": "1",
+        "b": {"c": 3}
+      },
+      ...
+      "n": {
+        "inherit": "2",
+        "d": 4
+      }
+    }
+    
+    The result will look something like this:
+    {
+      "1": {
+        "a": 1,
+        "b": {"c": 2, "d": 3, ...}
+      },
+      "2": {
+        "a": 1,
+        "b": {"c": 3, "d": 3, ...}
+      },
+      ...
+      "n": {
+        "a": 1,
+        "b": {"c": 3, "d": 3, ...},
+        "d": 4
+      }
+    }
+    
+    Parameters
+    ----------
+    d : dict
+        Top-level "namespace" dictionary containing other dictionaries, each of
+        which may contain an 'inherit' key to be resolved; edited in-place
+    
+    Raises
+    ------
+    RecursionError
+        If two dictionaries attempt to inherit each other
+    KeyError
+        If a dictionary tries to inherit from a key that is not in `d`
+
+    """
+
+    def dictInherit(d, child, parent):
+        if 'inherit' not in parent:
+            del child['inherit']
+            p = copy.deepcopy(parent)
+            return dictMerge(p, child)
+        elif d[parent['inherit']] is child:
+            raise RecursionError
+        else:
+            return dictInherit(d, parent, d[parent['inherit']])
+
+    for (k, v) in d.items():
+        if isinstance(v, collections.abc.Mapping) and 'inherit' in v:
+            d[k] = dictInherit(d, v, d[v['inherit']])
+        else:
+            continue

From d07cc961153be3e1698d793fecfc3e0ef74c22f7 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sat, 22 Aug 2020 16:00:15 -0700
Subject: [PATCH 44/62] QStrip_Vertical.yaml: + Minor fix in a description
 dict_tools.py: + Shebang + Reorder dictInherit() docstring

---
 .../Connector_Samtec/QStrip_Vertical.yaml     |  1 -
 scripts/tools/dict_tools.py                   | 33 ++++++++++---------
 2 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
index 50d8d57ea..386a72e0e 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
@@ -337,7 +337,6 @@ Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
     tags: >-
       connector Samtec QSeries QStrip QPairs HSMC host socket mezzanine
       vertical single-ended differential application-specific
-      Bank 1 differential; {ds:s}
     datasheet: 'http://suddendocs.samtec.com/prints/asp-122953-01-mkt.pdf'
   layout: {type: 'Socket', width: 61.38, height: 7.24}
   banks: {n: 3, diff: 1, space: 20.0, width: 17.14, height: 3.8}
diff --git a/scripts/tools/dict_tools.py b/scripts/tools/dict_tools.py
index e012c18a2..d7b7cf61b 100644
--- a/scripts/tools/dict_tools.py
+++ b/scripts/tools/dict_tools.py
@@ -1,3 +1,5 @@
+#!/usr/bin/env python
+
 import collections.abc
 import copy
 
@@ -49,6 +51,21 @@ def dictInherit(d):
     dictMerge() until all of the 'inherit' entries have been resolved. The 
     result is applied to `d` in-place.
     
+    Parameters
+    ----------
+    d : dict
+        Top-level "namespace" dictionary containing other dictionaries, each of
+        which may contain an 'inherit' key to be resolved; edited in-place
+    
+    Raises
+    ------
+    RecursionError
+        If two dictionaries attempt to inherit each other
+    KeyError
+        If a dictionary tries to inherit from a key that is not in `d`
+    
+    Notes
+    -----
     Typical JSON/YAML file structure that can be processed by this function:
     {
       "1": {
@@ -83,22 +100,8 @@ def dictInherit(d):
         "d": 4
       }
     }
-    
-    Parameters
-    ----------
-    d : dict
-        Top-level "namespace" dictionary containing other dictionaries, each of
-        which may contain an 'inherit' key to be resolved; edited in-place
-    
-    Raises
-    ------
-    RecursionError
-        If two dictionaries attempt to inherit each other
-    KeyError
-        If a dictionary tries to inherit from a key that is not in `d`
-
     """
-
+    
     def dictInherit(d, child, parent):
         if 'inherit' not in parent:
             del child['inherit']

From 7fef5e89a37a6b1a6440a9f5b099d0884f827196 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sat, 22 Aug 2020 17:44:48 -0700
Subject: [PATCH 45/62] QStrip_Vertical.py: + Add dictInherit support
 QStrip_Vertical.json: + Migrate QTH specs from QStrip_Vertical.yaml

---
 .../Connector_Samtec/QStrip_Vertical.json     | 95 +++++++++++++++++++
 .../Connector_Samtec/QStrip_Vertical.py       |  3 +
 2 files changed, 98 insertions(+)
 create mode 100644 scripts/Connector/Connector_Samtec/QStrip_Vertical.json

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.json b/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
new file mode 100644
index 000000000..9412882ce
--- /dev/null
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
@@ -0,0 +1,95 @@
+{
+    "Samtec_QTH-030-xx-x-D_P0.5mm_Vertical": {
+        "library": "Connector_Samtec_QStrip",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip; {banks:d} bank(s), {pins:d} pins/bank ({ds:s}); generated with kicad-footprint-generator",
+            "datasheet": "http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-mkt.pdf, http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf",
+            "tags": "connector Samtec QStrip QTH mezzanine terminal vertical single-ended"
+        },
+        "layout": {"type": "Terminal", "width": 20.0, "height": 5.97},
+        "banks":  {"n": 1, "diff": 0, "width": 16.88, "height": 4.0, "space": 20.0},
+        "pads": {
+            "signal": {"n": 60, "pitch": 0.5, "width": 0.305, "height": 1.45, "y": 3.086},
+            "planes": [
+                {"n": 2, "pitch": 16.89, "width": 2.54, "height": 0.64, "y": 0},
+                {"n": 2, "pitch":  6.35, "width": 4.7,  "height": 0.64, "y": 0}
+            ]
+        }
+    },
+    "Samtec_QTH-030-xx-x-D-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_QTH-030-xx-x-D_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 18.48, "y": -2.03}]
+    },
+    
+    "Samtec_QTH-060-xx-x-D_P0.5mm_Vertical": {
+        "inherit": "Samtec_QTH-030-xx-x-D_P0.5mm_Vertical",
+        "layout": {"width": 40.0},
+        "banks": {"n": 2}
+    },
+    "Samtec_QTH-060-xx-x-D-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_QTH-060-xx-x-D_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 38.48, "y": -2.03}]
+    },
+    
+    "Samtec_QTH-090-xx-x-D_P0.5mm_Vertical": {
+        "inherit": "Samtec_QTH-030-xx-x-D_P0.5mm_Vertical",
+        "layout": {"width": 60.0},
+        "banks": {"n": 3}
+    },
+    "Samtec_QTH-090-xx-x-D-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_QTH-090-xx-x-D_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 58.48, "y": -2.03}]
+    },
+
+    "Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical": {
+        "inherit": "Samtec_QTH-030-xx-x-D_P0.5mm_Vertical",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Pairs High-Speed Ground Plane {type:s} Strip, Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank ({ds:s}); generated with kicad-footprint-generator",
+            "datasheet": "http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-mkt.pdf, http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf",
+            "tags": "connector Samtec QPairs QTH mezzanine terminal vertical differential"
+        },
+        "banks": {"diff": 1}
+    },
+    "Samtec_QTH-020-xx-x-D-DP-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 18.48, "y": -2.03}]
+    },
+
+    "Samtec_QTH-040-xx-x-D-DP_P0.5mm_Vertical": {
+        "inherit": "Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical",
+        "layout": {"width": 40.0},
+        "banks": {"n": 2, "diff": 2}
+    },
+    "Samtec_QTH-040-xx-x-D-DP-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_QTH-040-xx-x-D-DP_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 38.48, "y": -2.03}]
+    },
+
+    "Samtec_QTH-060-xx-x-D-DP_P0.5mm_Vertical": {
+        "inherit": "Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical",
+        "layout": {"width": 60.0},
+        "banks": {"n": 3, "diff": 3}
+    },
+    "Samtec_QTH-060-xx-x-D-DP-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_QTH-060-xx-x-D-DP_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 58.48, "y": -2.03}]
+    },
+
+    "Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical": {
+        "inherit": "Samtec_QTH-090-xx-x-D-A_P0.5mm_Vertical",
+        "library": "Connector_Samtec",
+        "meta": {
+            "pn": "ASP-122952-01",
+            "description": "Samtec {pn:s} HSMC Card {type:s}; modified QTH-090-01-L-D-A, Bank 1 differential ({ds:s}); generated with kicad-footprint-generator",
+            "datasheet": "http://suddendocs.samtec.com/prints/asp-122952-01-mkt.pdf",
+            "tags": "connector Samtec QStrip QPairs HSMC card terminal mezzanine vertical single-ended differential alignment-pins application-specific"
+        },
+        "banks": {"diff": 1}
+    }
+}
diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
index 502f59b8d..b2c41b8fb 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
@@ -75,6 +75,7 @@
 from KicadModTree import *
 from footprint_text_fields import addTextFields
 from helpers import *
+from dict_tools import *
 
 def generate_one_footprint(param, config, default_lib):
     fp = Footprint(param['name'])
@@ -411,6 +412,8 @@ def generate_one_footprint(param, config, default_lib):
                     print(path, "empty, skipping...")
                     continue
 
+                dictInherit(footprints)
+                
                 for fp_name in footprints:
                     fp_params = footprints.get(fp_name)                    
                     if 'name' in fp_params:

From 8c82a0fac7b67efb09173fd7f6f636cff9d43db6 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sun, 23 Aug 2020 13:10:16 -0700
Subject: [PATCH 46/62] Add QTS family to QStrip_Vertical.json

---
 .../Connector_Samtec/QStrip_Vertical.json     | 172 +++++++++++++++++-
 1 file changed, 164 insertions(+), 8 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.json b/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
index 9412882ce..8a18884c9 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
@@ -3,7 +3,7 @@
         "library": "Connector_Samtec_QStrip",
         "meta": {
             "description": "Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip; {banks:d} bank(s), {pins:d} pins/bank ({ds:s}); generated with kicad-footprint-generator",
-            "datasheet": "http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-mkt.pdf, http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf",
+            "datasheet": "http://suddendocs.samtec.com/catalog_english/qth.pdf",
             "tags": "connector Samtec QStrip QTH mezzanine terminal vertical single-ended"
         },
         "layout": {"type": "Terminal", "width": 20.0, "height": 5.97},
@@ -21,7 +21,6 @@
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 18.48, "y": -2.03}]
     },
-    
     "Samtec_QTH-060-xx-x-D_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-030-xx-x-D_P0.5mm_Vertical",
         "layout": {"width": 40.0},
@@ -32,7 +31,6 @@
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 38.48, "y": -2.03}]
     },
-    
     "Samtec_QTH-090-xx-x-D_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-030-xx-x-D_P0.5mm_Vertical",
         "layout": {"width": 60.0},
@@ -43,12 +41,10 @@
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 58.48, "y": -2.03}]
     },
-
     "Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-030-xx-x-D_P0.5mm_Vertical",
         "meta": {
             "description": "Samtec {pn:s} {pitch:1.2f}mm Q Pairs High-Speed Ground Plane {type:s} Strip, Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank ({ds:s}); generated with kicad-footprint-generator",
-            "datasheet": "http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-mkt.pdf, http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf",
             "tags": "connector Samtec QPairs QTH mezzanine terminal vertical differential"
         },
         "banks": {"diff": 1}
@@ -58,7 +54,6 @@
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 18.48, "y": -2.03}]
     },
-
     "Samtec_QTH-040-xx-x-D-DP_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical",
         "layout": {"width": 40.0},
@@ -69,7 +64,6 @@
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 38.48, "y": -2.03}]
     },
-
     "Samtec_QTH-060-xx-x-D-DP_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical",
         "layout": {"width": 60.0},
@@ -80,7 +74,6 @@
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 58.48, "y": -2.03}]
     },
-
     "Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-090-xx-x-D-A_P0.5mm_Vertical",
         "library": "Connector_Samtec",
@@ -91,5 +84,168 @@
             "tags": "connector Samtec QStrip QPairs HSMC card terminal mezzanine vertical single-ended differential alignment-pins application-specific"
         },
         "banks": {"diff": 1}
+    },
+
+    "Samtec_QSH-030-xx-x-D_P0.5mm_Vertical": {
+        "library": "Connector_Samtec_QStrip",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip; {banks:d} bank(s), {pins:d} pins/bank ({ds:s}); generated with kicad-footprint-generator",
+            "datasheet": "http://suddendocs.samtec.com/catalog_english/qsh.pdf",
+            "tags": "connector Samtec QStrip QSH mezzanine socket vertical single-ended"
+        },
+        "layout": {"type": "Socket", "width": 21.27, "height": 7.24},
+        "banks": {"n": 1, "diff": 0, "space": 20.0, "width": 17.14, "height": 3.8},
+        "pads": {
+            "signal": {"n": 60, "pitch": 0.5, "y": 2.865, "width": 0.279, "height": 2.27},
+            "planes": [
+                {"n": 2, "pitch": 16.13, "y": 0, "width": 2.54, "height": 0.43},
+                {"n": 2, "pitch":  6.35, "y": 0, "width": 4.7,  "height": 0.43}
+            ]
+        }
+    },
+    "Samtec_QSH-030-xx-x-D-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_QSH-030-xx-x-D_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 20.13, "y": 2.67}]
+    },
+    "Samtec_QSH-060-xx-x-D_P0.5mm_Vertical": {
+        "inherit": "Samtec_QSH-030-xx-x-D_P0.5mm_Vertical",
+        "layout": {"width": 41.27},
+        "banks": {"n": 2}
+    },
+    "Samtec_QSH-060-xx-x-D-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_QSH-060-xx-x-D_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 40.13, "y": 2.67}]
+    },
+    "Samtec_QSH-090-xx-x-D_P0.5mm_Vertical": {
+        "inherit": "Samtec_QSH-030-xx-x-D_P0.5mm_Vertical",
+        "layout": {"width": 61.27},
+        "banks": {"n": 3}
+    },
+    "Samtec_QSH-090-xx-x-D-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_QSH-090-xx-x-D_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 60.13, "y": 2.67}]
+    },
+    "Samtec_QSH-020-xx-x-D-DP_P0.5mm_Vertical": {
+        "inherit": "Samtec_QSH-030-xx-x-D_P0.5mm_Vertical",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Pairs High-Speed Ground Plane {type:s} Strip, Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank ({ds:s}); generated with kicad-footprint-generator",
+            "tags": "connector Samtec QPairs QSH mezzanine socket vertical differential"
+        },
+        "banks": {"diff": 1}
+    },
+    "Samtec_QSH-020-xx-x-D-DP-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_QSH-020-xx-x-D-DP_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 20.13, "y": 2.67}]
+    },
+    "Samtec_QSH-040-xx-x-D-DP_P0.5mm_Vertical": {
+        "inherit": "Samtec_QSH-020-xx-x-D-DP_P0.5mm_Vertical",
+        "layout": {"width": 41.27},
+        "banks": {"n": 2, "diff": 2}
+    },
+    "Samtec_QSH-040-xx-x-D-DP-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_QSH-040-xx-x-D-DP_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 40.13, "y": 2.67}]
+    },
+    "Samtec_QSH-060-xx-x-D-DP_P0.5mm_Vertical": {
+        "inherit": "Samtec_QSH-020-xx-x-D-DP_P0.5mm_Vertical",
+        "layout": {"width": 61.27},
+        "banks": {"n": 3, "diff": 3}
+    },
+    "Samtec_QSH-060-xx-x-D-DP-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_QSH-060-xx-x-D-DP_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 60.13, "y": 2.67}]
+    },
+    "Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical": {
+        "inherit": "Samtec_QSH-090-xx-x-D-A_P0.5mm_Vertical",
+        "library": "Connector_Samtec",
+        "meta": {
+            "pn": "ASP-122953-01",
+            "description": "Samtec {pn:s} HSMC Host {type:s}; modified QSH-090-01-L-D-A, Bank 1 differential ({ds:s}); generated with kicad-footprint-generator",
+            "datasheet": "http://suddendocs.samtec.com/prints/asp-122953-01-mkt.pdf",
+            "tags": "connector Samtec QSeries QStrip QPairs HSMC host socket mezzanine vertical single-ended differential application-specific"
+        },
+        "banks": {"diff": 1}
+    },
+    
+    "Samtec_QTS-025-xx-x-D_P0.635mm_Vertical": {
+        "library": "Connector_Samtec_QStrip",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.3f}mm Q Strip High-Speed Ground Plane {type:s} Strip; {banks:d} bank(s), {pins:d} pins/bank ({ds:s}); generated with kicad-footprint-generator",
+            "datasheet": "http://suddendocs.samtec.com/catalog_english/qts.pdf",
+            "tags": "connector Samtec QStrip QTS mezzanine terminal vertical"
+        },
+        "layout": {"type": "Terminal", "width": 20.0, "height": 5.97},
+        "banks": {"n": 1, "diff": 0, "space": 20.0, "width": 16.88, "height": 4.0},
+        "pads": {
+            "signal": {"n": 50, "pitch": 0.635, "y": 3.086, "width": 0.406, "height": 1.45},
+            "planes": [
+                {"n": 2, "pitch": 16.89, "y": 0, "width": 2.54, "height": 0.635},
+                {"n": 2, "pitch":  6.35, "y": 0, "width": 4.70, "height": 0.635}
+            ]
+        }
+    },
+    "Samtec_QTS-025-xx-x-D-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_QTS-025-xx-x-D_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 18.48, "y": -2.03}]
+    },
+    "Samtec_QTS-050-xx-x-D_P0.635mm_Vertical": {
+        "inherit": "Samtec_QTS-025-xx-x-D_P0.635mm_Vertical",
+        "layout": {"width": 40.0},
+        "banks": {"n": 2}
+    },
+    "Samtec_QTS-050-xx-x-D-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_QTS-050-xx-x-D_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 38.48, "y": -2.03}]
+    },
+    "Samtec_QTS-075-xx-x-D_P0.635mm_Vertical": {
+        "inherit": "Samtec_QTS-025-xx-x-D_P0.635mm_Vertical",
+        "layout": {"width": 60.0},
+        "banks": {"n": 3}
+    },
+    "Samtec_QTS-075-xx-x-D-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_QTS-075-xx-x-D_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 58.48, "y": -2.03}]
+    },
+    "Samtec_QTS-016-xx-x-D-DP_P0.635mm_Vertical": {
+        "inherit": "Samtec_QTS-025-xx-x-D_P0.635mm_Vertical",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.3f}mm Q Pairs High-Speed Ground Plane {type:s} Strip, Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank ({ds:s}); generated with kicad-footprint-generator",
+            "tags": "connector Samtec QPairs QTS mezzanine terminal vertical differential"
+        },
+        "banks": {"diff": 1}
+    },
+    "Samtec_QTS-016-xx-x-D-DP-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_QTS-016-xx-x-D-DP_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 18.48, "y": -2.03}]
+    },
+    "Samtec_QTS-032-xx-x-D-DP_P0.635mm_Vertical": {
+        "inherit": "Samtec_QTS-016-xx-x-D-DP_P0.635mm_Vertical",
+        "layout": {"width": 40.0},
+        "banks": {"n": 2, "diff": 2}
+    },
+    "Samtec_QTS-032-xx-x-D-DP-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_QTS-032-xx-x-D-DP_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 38.48, "y": -2.03}]
+    },
+    "Samtec_QTS-048-xx-x-D-DP_P0.635mm_Vertical": {
+        "inherit": "Samtec_QTS-016-xx-x-D-DP_P0.635mm_Vertical",
+        "layout": {"width": 60.0},
+        "banks": {"n": 3, "diff": 3}
+    },
+    "Samtec_QTS-048-xx-x-D-DP-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_QTS-048-xx-x-D-DP_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 58.48, "y": -2.03}]
     }
 }

From bfcd2dc7965079cfc8d665b15243d4154195ce12 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Mon, 24 Aug 2020 15:10:41 -0700
Subject: [PATCH 47/62] + Finish populating QStrip_Vertical.json - Remove
 QStrip_Vertical.yaml

---
 .../Connector_Samtec/QStrip_Vertical.json     | 274 +++++-
 .../Connector_Samtec/QStrip_Vertical.yaml     | 817 ------------------
 2 files changed, 251 insertions(+), 840 deletions(-)
 delete mode 100644 scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.json b/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
index 8a18884c9..748a914ef 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
@@ -7,19 +7,19 @@
             "tags": "connector Samtec QStrip QTH mezzanine terminal vertical single-ended"
         },
         "layout": {"type": "Terminal", "width": 20.0, "height": 5.97},
-        "banks":  {"n": 1, "diff": 0, "width": 16.88, "height": 4.0, "space": 20.0},
+        "banks":  {"n": 1, "diff": 0, "width": 16.88, "height": 3.9, "space": 20.0},
         "pads": {
             "signal": {"n": 60, "pitch": 0.5, "width": 0.305, "height": 1.45, "y": 3.086},
             "planes": [
-                {"n": 2, "pitch": 16.89, "width": 2.54, "height": 0.64, "y": 0},
-                {"n": 2, "pitch":  6.35, "width": 4.7,  "height": 0.64, "y": 0}
+                {"n": 2, "pitch": 16.89, "width": 2.54, "height": 0.635, "y": 0},
+                {"n": 2, "pitch":  6.35, "width": 4.70, "height": 0.635, "y": 0}
             ]
         }
     },
     "Samtec_QTH-030-xx-x-D-A_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-030-xx-x-D_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
-        "holes": [{"drill": 1.0, "space": 18.48, "y": -2.03}]
+        "holes": [{"drill": 1.0, "space": 18.48, "y": -2.032}]
     },
     "Samtec_QTH-060-xx-x-D_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-030-xx-x-D_P0.5mm_Vertical",
@@ -29,7 +29,7 @@
     "Samtec_QTH-060-xx-x-D-A_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-060-xx-x-D_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
-        "holes": [{"drill": 1.0, "space": 38.48, "y": -2.03}]
+        "holes": [{"drill": 1.0, "space": 38.48, "y": -2.032}]
     },
     "Samtec_QTH-090-xx-x-D_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-030-xx-x-D_P0.5mm_Vertical",
@@ -39,7 +39,7 @@
     "Samtec_QTH-090-xx-x-D-A_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-090-xx-x-D_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
-        "holes": [{"drill": 1.0, "space": 58.48, "y": -2.03}]
+        "holes": [{"drill": 1.0, "space": 58.48, "y": -2.032}]
     },
     "Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-030-xx-x-D_P0.5mm_Vertical",
@@ -52,7 +52,7 @@
     "Samtec_QTH-020-xx-x-D-DP-A_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
-        "holes": [{"drill": 1.0, "space": 18.48, "y": -2.03}]
+        "holes": [{"drill": 1.0, "space": 18.48, "y": -2.032}]
     },
     "Samtec_QTH-040-xx-x-D-DP_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical",
@@ -62,7 +62,7 @@
     "Samtec_QTH-040-xx-x-D-DP-A_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-040-xx-x-D-DP_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
-        "holes": [{"drill": 1.0, "space": 38.48, "y": -2.03}]
+        "holes": [{"drill": 1.0, "space": 38.48, "y": -2.032}]
     },
     "Samtec_QTH-060-xx-x-D-DP_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical",
@@ -72,7 +72,7 @@
     "Samtec_QTH-060-xx-x-D-DP-A_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-060-xx-x-D-DP_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
-        "holes": [{"drill": 1.0, "space": 58.48, "y": -2.03}]
+        "holes": [{"drill": 1.0, "space": 58.48, "y": -2.032}]
     },
     "Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-090-xx-x-D-A_P0.5mm_Vertical",
@@ -94,12 +94,12 @@
             "tags": "connector Samtec QStrip QSH mezzanine socket vertical single-ended"
         },
         "layout": {"type": "Socket", "width": 21.27, "height": 7.24},
-        "banks": {"n": 1, "diff": 0, "space": 20.0, "width": 17.14, "height": 3.8},
+        "banks": {"n": 1, "diff": 0, "space": 20.0, "width": 16.64, "height": 3.81},
         "pads": {
-            "signal": {"n": 60, "pitch": 0.5, "y": 2.865, "width": 0.279, "height": 2.27},
+            "signal": {"n": 60, "pitch": 0.5, "width": 0.279, "height": 2.27, "y": 2.865},
             "planes": [
-                {"n": 2, "pitch": 16.13, "y": 0, "width": 2.54, "height": 0.43},
-                {"n": 2, "pitch":  6.35, "y": 0, "width": 4.7,  "height": 0.43}
+                {"n": 2, "pitch": 16.13, "width": 2.54, "height": 0.43, "y": 0},
+                {"n": 2, "pitch":  6.35, "width": 4.7,  "height": 0.43, "y": 0}
             ]
         }
     },
@@ -181,19 +181,19 @@
             "tags": "connector Samtec QStrip QTS mezzanine terminal vertical"
         },
         "layout": {"type": "Terminal", "width": 20.0, "height": 5.97},
-        "banks": {"n": 1, "diff": 0, "space": 20.0, "width": 16.88, "height": 4.0},
+        "banks": {"n": 1, "diff": 0, "space": 20.0, "width": 16.88, "height": 3.94},
         "pads": {
-            "signal": {"n": 50, "pitch": 0.635, "y": 3.086, "width": 0.406, "height": 1.45},
+            "signal": {"n": 50, "pitch": 0.635, "width": 0.406, "height": 1.448, "y": 3.086},
             "planes": [
-                {"n": 2, "pitch": 16.89, "y": 0, "width": 2.54, "height": 0.635},
-                {"n": 2, "pitch":  6.35, "y": 0, "width": 4.70, "height": 0.635}
+                {"n": 2, "pitch": 16.89, "width": 2.54, "height": 0.635, "y": 0},
+                {"n": 2, "pitch":  6.35, "width": 4.70, "height": 0.635, "y": 0}
             ]
         }
     },
     "Samtec_QTS-025-xx-x-D-A_P0.635mm_Vertical": {
         "inherit": "Samtec_QTS-025-xx-x-D_P0.635mm_Vertical",
         "add-tags": "alignment-pins",
-        "holes": [{"drill": 1.0, "space": 18.48, "y": -2.03}]
+        "holes": [{"drill": 1.0, "space": 18.48, "y": -2.032}]
     },
     "Samtec_QTS-050-xx-x-D_P0.635mm_Vertical": {
         "inherit": "Samtec_QTS-025-xx-x-D_P0.635mm_Vertical",
@@ -203,7 +203,7 @@
     "Samtec_QTS-050-xx-x-D-A_P0.635mm_Vertical": {
         "inherit": "Samtec_QTS-050-xx-x-D_P0.635mm_Vertical",
         "add-tags": "alignment-pins",
-        "holes": [{"drill": 1.0, "space": 38.48, "y": -2.03}]
+        "holes": [{"drill": 1.0, "space": 38.48, "y": -2.032}]
     },
     "Samtec_QTS-075-xx-x-D_P0.635mm_Vertical": {
         "inherit": "Samtec_QTS-025-xx-x-D_P0.635mm_Vertical",
@@ -213,7 +213,7 @@
     "Samtec_QTS-075-xx-x-D-A_P0.635mm_Vertical": {
         "inherit": "Samtec_QTS-075-xx-x-D_P0.635mm_Vertical",
         "add-tags": "alignment-pins",
-        "holes": [{"drill": 1.0, "space": 58.48, "y": -2.03}]
+        "holes": [{"drill": 1.0, "space": 58.48, "y": -2.032}]
     },
     "Samtec_QTS-016-xx-x-D-DP_P0.635mm_Vertical": {
         "inherit": "Samtec_QTS-025-xx-x-D_P0.635mm_Vertical",
@@ -226,7 +226,7 @@
     "Samtec_QTS-016-xx-x-D-DP-A_P0.635mm_Vertical": {
         "inherit": "Samtec_QTS-016-xx-x-D-DP_P0.635mm_Vertical",
         "add-tags": "alignment-pins",
-        "holes": [{"drill": 1.0, "space": 18.48, "y": -2.03}]
+        "holes": [{"drill": 1.0, "space": 18.48, "y": -2.032}]
     },
     "Samtec_QTS-032-xx-x-D-DP_P0.635mm_Vertical": {
         "inherit": "Samtec_QTS-016-xx-x-D-DP_P0.635mm_Vertical",
@@ -236,7 +236,7 @@
     "Samtec_QTS-032-xx-x-D-DP-A_P0.635mm_Vertical": {
         "inherit": "Samtec_QTS-032-xx-x-D-DP_P0.635mm_Vertical",
         "add-tags": "alignment-pins",
-        "holes": [{"drill": 1.0, "space": 38.48, "y": -2.03}]
+        "holes": [{"drill": 1.0, "space": 38.48, "y": -2.032}]
     },
     "Samtec_QTS-048-xx-x-D-DP_P0.635mm_Vertical": {
         "inherit": "Samtec_QTS-016-xx-x-D-DP_P0.635mm_Vertical",
@@ -246,6 +246,234 @@
     "Samtec_QTS-048-xx-x-D-DP-A_P0.635mm_Vertical": {
         "inherit": "Samtec_QTS-048-xx-x-D-DP_P0.635mm_Vertical",
         "add-tags": "alignment-pins",
-        "holes": [{"drill": 1.0, "space": 58.48, "y": -2.03}]
+        "holes": [{"drill": 1.0, "space": 58.48, "y": -2.032}]
+    },
+
+    "Samtec_QSS-025-xx-x-D_P0.635mm_Vertical": {
+        "library": "Connector_Samtec_QStrip",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.3f}mm Q Strip High-Speed Ground Plane {type:s} Strip; {banks:d} bank(s), {pins:d} pins/bank ({ds:s}); generated with kicad-footprint-generator",
+            "datasheet": "http://suddendocs.samtec.com/catalog_english/qss.pdf",
+            "tags": "connector Samtec QStrip QSS mezzanine socket vertical single-ended"
+        },
+        "layout": {"type": "Socket", "width": 21.27, "height": 7.24},
+        "banks": {"n": 1, "diff": 0, "space": 20.0, "width": 16.64, "height": 3.66},
+        "pads": {
+            "signal": {"n": 60, "pitch": 0.635, "width": 0.406, "height": 2.273, "y": 2.865},
+            "planes": [
+                {"n": 2, "pitch": 16.13, "width": 2.8, "height": 0.432, "y": 0},
+                {"n": 2, "pitch":  6.35, "width": 4.7, "height": 0.432, "y": 0}
+            ]
+        }
+    },
+    "Samtec_QSS-025-xx-x-D-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_QSS-025-xx-x-D_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 20.0, "y": 2.67}]
+    },
+    "Samtec_QSS-050-xx-x-D_P0.635mm_Vertical": {
+        "inherit": "Samtec_QSS-025-xx-x-D_P0.635mm_Vertical",
+        "layout": {"width": 41.27},
+        "banks": {"n": 2}
+    },
+    "Samtec_QSS-050-xx-x-D-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_QSS-050-xx-x-D_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 40.0, "y": 2.67}]
+    },
+    "Samtec_QSS-075-xx-x-D_P0.635mm_Vertical": {
+        "inherit": "Samtec_QSS-025-xx-x-D_P0.635mm_Vertical",
+        "layout": {"width": 61.27},
+        "banks": {"n": 3}
+    },
+    "Samtec_QSS-075-xx-x-D-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_QSS-075-xx-x-D_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 60.0, "y": 2.67}]
+    },
+    "Samtec_QSS-016-xx-x-D-DP_P0.635mm_Vertical": {
+        "inherit": "Samtec_QSS-025-xx-x-D_P0.635mm_Vertical",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.3f}mm Q Pairs High-Speed Ground Plane {type:s} Strip, Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank ({ds:s}); generated with kicad-footprint-generator",
+            "tags": "connector Samtec QPairs QSS mezzanine socket vertical differential"
+        },
+        "banks": {"diff": 1}
+    },
+    "Samtec_QSS-016-xx-x-D-DP-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_QSS-016-xx-x-D-DP_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 20.0, "y": 2.67}]
+    },
+    "Samtec_QSS-032-xx-x-D-DP_P0.635mm_Vertical": {
+        "inherit": "Samtec_QSS-016-xx-x-D-DP_P0.635mm_Vertical",
+        "layout": {"width": 41.27},
+        "banks": {"n": 2, "diff": 2}
+    },
+    "Samtec_QSS-032-xx-x-D-DP-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_QSS-032-xx-x-D-DP_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 40.0, "y": 2.67}]
+    },
+    "Samtec_QSS-048-xx-x-D-DP_P0.635mm_Vertical": {
+        "inherit": "Samtec_QSS-016-xx-x-D-DP_P0.635mm_Vertical",
+        "layout": {"width": 61.27},
+        "banks": {"n": 3, "diff": 3}
+    },
+    "Samtec_QSS-048-xx-x-D-DP-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_QSS-048-xx-x-D-DP_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 60.0, "y": 2.67}]
+    },
+
+    "Samtec_QTE-020-xx-x-D_P0.8mm_Vertical": {
+        "library": "Connector_Samtec_QStrip",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip; {banks:d} bank(s), {pins:d} pins/bank ({ds:s}); generated with kicad-footprint-generator",
+            "datasheet": "http://suddendocs.samtec.com/catalog_english/qte.pdf",
+            "tags": "connector Samtec QStrip QTE mezzanine terminal vertical"
+        },
+        "layout": {"type": "Terminal", "width": 20.0, "height": 5.97},
+        "banks":  {"n": 1, "diff": 0, "width": 16.88, "height": 3.94, "space": 20.0},
+        "pads": {
+            "signal": {"n": 40, "pitch": 0.8, "width": 0.46, "height": 1.45, "y": 3.086},
+            "planes": [
+                {"n": 2, "pitch": 16.89, "width": 2.54, "height": 0.635, "y": 0},
+                {"n": 2, "pitch":  6.35, "width": 4.7,  "height": 0.635, "y": 0}
+            ]
+        }
+    },
+    "Samtec_QTE-020-xx-x-D-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_QTE-020-xx-x-D_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 18.48, "y": -2.032}]
+    },
+    "Samtec_QTE-040-xx-x-D_P0.8mm_Vertical": {
+        "inherit": "Samtec_QTE-020-xx-x-D_P0.8mm_Vertical",
+        "layout": {"width": 40.0},
+        "banks": {"n": 2}
+    },
+    "Samtec_QTE-040-xx-x-D-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_QTE-040-xx-x-D_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 38.48, "y": -2.032}]
+    },
+    "Samtec_QTE-060-xx-x-D_P0.8mm_Vertical": {
+        "inherit": "Samtec_QTE-020-xx-x-D_P0.8mm_Vertical",
+        "layout": {"width": 60.0},
+        "banks": {"n": 2}
+    },
+    "Samtec_QTE-060-xx-x-D-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_QTE-060-xx-x-D_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 58.48, "y": -2.032}]
+    },
+    "Samtec_QTE-014-xx-x-D-DP_P0.8mm_Vertical": {
+        "inherit": "Samtec_QTE-020-xx-x-D_P0.8mm_Vertical",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Pairs High-Speed Ground Plane {type:s} Strip, Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank ({ds:s}); generated with kicad-footprint-generator",
+            "tags": "connector Samtec QPairs QTE mezzanine terminal vertical differential"
+        },
+        "banks": {"diff": 1}
+    },
+    "Samtec_QTE-014-xx-x-D-DP-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_QTE-014-xx-x-D-DP_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 18.48, "y": -2.032}]
+    },
+    "Samtec_QTE-028-xx-x-D-DP_P0.8mm_Vertical": {
+        "inherit": "Samtec_QTE-014-xx-x-D-DP_P0.8mm_Vertical",
+        "layout": {"width": 40.0},
+        "banks": {"n": 2, "diff": 2}
+    },
+    "Samtec_QTE-028-xx-x-D-DP-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_QTE-028-xx-x-D-DP_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 38.48, "y": -2.032}]
+    },
+    "Samtec_QTE-042-xx-x-D-DP_P0.8mm_Vertical": {
+        "inherit": "Samtec_QTE-014-xx-x-D-DP_P0.8mm_Vertical",
+        "layout": {"width": 60.0},
+        "banks": {"n": 3, "diff": 3}
+    },
+    "Samtec_QTE-042-xx-x-D-DP-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_QTE-042-xx-x-D-DP_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 58.48, "y": -2.032}]
+    },
+
+    "Samtec_QSE-020-xx-x-D_P0.8mm_Vertical": {
+        "library": "Connector_Samtec_QStrip",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip; {banks:d} bank(s), {pins:d} pins/bank ({ds:s}); generated with kicad-footprint-generator",
+            "datasheet": "http://suddendocs.samtec.com/catalog_english/qse.pdf",
+            "tags": "connector Samtec QStrip QSE mezzanine socket vertical single-ended"
+        },
+        "layout": {"type": "Socket", "width": 21.27, "height": 7.24},
+        "banks": {"n": 1, "diff": 0, "space": 20.0, "width": 16.64, "height": 3.81},
+        "pads": {
+            "signal": {"n": 40, "pitch": 0.8, "width": 0.41, "height": 2.27, "y": 2.865},
+            "planes": [
+                {"n": 2, "pitch": 16.13, "width": 2.54, "height": 0.43, "y": 0},
+                {"n": 2, "pitch":  6.35, "width": 4.7,  "height": 0.43, "y": 0}
+            ]
+        }
+    },
+    "Samtec_QSE-020-xx-x-D-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_QSE-020-xx-x-D_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 20.13, "y": 2.67}]
+    },
+    "Samtec_QSE-040-xx-x-D_P0.8mm_Vertical": {
+        "inherit": "Samtec_QSE-020-xx-x-D_P0.8mm_Vertical",
+        "layout": {"width": 41.27},
+        "banks": {"n": 2}
+    },
+    "Samtec_QSE-040-xx-x-D-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_QSE-040-xx-x-D_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 40.13, "y": 2.67}]
+    },
+    "Samtec_QSE-060-xx-x-D_P0.8mm_Vertical": {
+        "inherit": "Samtec_QSE-020-xx-x-D_P0.8mm_Vertical",
+        "layout": {"width": 61.27},
+        "banks": {"n": 3}
+    },
+    "Samtec_QSE-060-xx-x-D-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_QSE-060-xx-x-D_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 60.13, "y": 2.67}]
+    },
+    "Samtec_QSE-014-xx-x-D-DP_P0.8mm_Vertical": {
+        "inherit": "Samtec_QSE-020-xx-x-D_P0.8mm_Vertical",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Pairs High-Speed Ground Plane {type:s} Strip, Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank ({ds:s}); generated with kicad-footprint-generator",
+            "tags": "connector Samtec QPairs QSE mezzanine socket vertical differential"
+        },
+        "banks": {"diff": 1}
+    },
+    "Samtec_QSE-014-xx-x-D-DP-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_QSE-014-xx-x-D-DP_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 20.13, "y": 2.67}]
+    },
+    "Samtec_QSE-028-xx-x-D-DP_P0.8mm_Vertical": {
+        "inherit": "Samtec_QSE-014-xx-x-D-DP_P0.8mm_Vertical",
+        "layout": {"width": 41.27},
+        "banks": {"n": 2, "diff": 2}
+    },
+    "Samtec_QSE-028-xx-x-D-DP-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_QSE-028-xx-x-D-DP_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 40.13, "y": 2.67}]
+    },
+    "Samtec_QSE-042-xx-x-D-DP_P0.8mm_Vertical": {
+        "inherit": "Samtec_QSE-014-xx-x-D-DP_P0.8mm_Vertical",
+        "layout": {"width": 61.27},
+        "banks": {"n": 3, "diff": 3}
+    },
+    "Samtec_QSE-042-xx-x-D-DP-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_QSE-042-xx-x-D-DP_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 60.13, "y": 2.67}]
     }
 }
diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml b/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
deleted file mode 100644
index 386a72e0e..000000000
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.yaml
+++ /dev/null
@@ -1,817 +0,0 @@
-# This file contains footprint specifications the vertical variations of Samtec
-# Q Strip and Q Pairs connectors. QStrip_QPairs_Vertical.py, contains a complete
-# specification of the properties and data types that can be used in this file.
-# Several non-standard (or uncommon) configurations of Q Strip and Q Pairs
-# connectors were added during the development process, but have since been
-# commented out in order to avoid cluttering the KiCad footprint library. Such
-# configurations are denoted with a double-comment followed by a space ("## ").
-#
-# Links:
-# - https://www.samtec.com/connectors/high-speed-board-to-board/mezzanine/qstrip
-# - https://www.samtec.com/connectors/high-speed-board-to-board/mezzanine/qpairs
-# 
-
-################################################################################
-# QTH family; 1 bank
-Samtec_QTH-030-xx-x-D_P0.5mm_Vertical: &QTH-030-xx-x-D
-  library: 'Connector_Samtec_QStrip'
-  meta: &QTH_meta
-    description: &QStrip_desc >-
-      Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip;
-      {banks:d} bank(s), {pins:d} pins/bank ({ds:s});
-      generated with kicad-footprint-generator
-    tags: 'connector Samtec QStrip QTH mezzanine terminal vertical single-ended'
-    datasheet: >-
-      http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-mkt.pdf,
-      http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf
-  layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 20.0, width: 16.88, height: 4.0}
-  pads: &QTH_pads
-    signal: {n: 60, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
-    planes: #{height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
-      - {n: 2, pitch: 16.89, y: 0, width: 2.54, height: 0.64}
-      - {n: 2, pitch:  6.35, y: 0, width: 4.7,  height: 0.64}
-
-Samtec_QTH-030-xx-x-D-A_P0.5mm_Vertical:
-  <<: *QTH-030-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 18.48, y: -2.03}
-
-## Samtec_QTH-030-xx-x-D-L_P0.5mm_Vertical:
-##   <<: *QTH-030-xx-x-D
-##   add-tags: 'latching'
-##   width: 23.0
-##   holes:
-##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
-## 
-## Samtec_QTH-030-xx-x-D-A-L_P0.5mm_Vertical:
-##   <<: *QTH-030-xx-x-D
-##   add-tags: 'alignment-pins latching'
-##   width: 23.0
-##   holes:
-##     - {drill: 1.0, space: 18.48, y: -2.03}
-##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
-
-# QTH family; 2 banks
-Samtec_QTH-060-xx-x-D_P0.5mm_Vertical: &QTH-060-xx-x-D
-  library: 'Connector_Samtec_QStrip'
-  meta: *QTH_meta
-  layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 0, space: 20.0, width: 16.88, height: 4.0}
-  pads: *QTH_pads
-
-Samtec_QTH-060-xx-x-D-A_P0.5mm_Vertical:
-  <<: *QTH-060-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 38.48, y: -2.03}
-
-## Samtec_QTH-060-xx-x-D-L_P0.5mm_Vertical:
-##   <<: *QTH-060-xx-x-D
-##   add-tags: 'latching'
-##   width: 43.0
-##   holes:
-##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
-## 
-## Samtec_QTH-060-xx-x-D-A-L_P0.5mm_Vertical:
-##   <<: *QTH-060-xx-x-D
-##   add-tags: 'alignment-pins latching'
-##   width: 43.0
-##   holes:
-##     - {drill: 1.0, space: 38.48, y: -2.03}
-##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
-
-# QTH family; 3 banks
-Samtec_QTH-090-xx-x-D_P0.5mm_Vertical: &QTH-090-xx-x-D
-  library: 'Connector_Samtec_QStrip'
-  meta: *QTH_meta
-  layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 0, space: 20.0, width: 16.88, height: 4.0}
-  pads: *QTH_pads
-
-Samtec_QTH-090-xx-x-D-A_P0.5mm_Vertical:
-  <<: *QTH-090-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 58.48, y: -2.03}
-
-# QTH-DP family; 1 bank; differential
-Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical: &QTH-020-xx-x-D-DP
-  library: 'Connector_Samtec_QStrip'
-  meta: &QTH-DP_meta
-    description: &QPairs_desc >-
-      Samtec {pn:s} {pitch:1.2f}mm Q Pairs High-Speed Ground Plane {type:s} Strip,
-      Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank ({ds:s});
-      generated with kicad-footprint-generator
-    tags: 'connector Samtec QPairs QTH mezzanine terminal vertical differential'
-    datasheet: >-
-      http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-mkt.pdf,
-      http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-dp-xxx-footprint.pdf
-  layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 1, space: 20.0, width: 16.88, height: 4.0}
-  pads: *QTH_pads
-
-Samtec_QTH-020-xx-x-D-DP-A_P0.5mm_Vertical:
-  <<: *QTH-020-xx-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 18.48, y: -2.03}
-
-## Samtec_QTH-020-xx-x-D-DP-L_P0.5mm_Vertical:
-##   <<: *QTH-020-xx-x-D-DP
-##   add-tags: 'latching'
-##   width: 23.0
-##   holes:
-##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
-## 
-## Samtec_QTH-020-xx-x-D-DP-A-L_P0.5mm_Vertical:
-##   <<: *QTH-020-xx-x-D-DP
-##   add-tags: 'alignment-pins latching'
-##   width: 23.0
-##   holes:
-##     - {drill: 1.0, space: 18.48, y: -2.03}
-##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
-
-# QTH-DP family; 2 banks; differential
-Samtec_QTH-040-xx-x-D-DP_P0.5mm_Vertical: &QTH-040-xx-x-D-DP
-  library: 'Connector_Samtec_QStrip'
-  meta: *QTH-DP_meta
-  layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 2, space: 20.0, width: 16.88, height: 4.0}
-  pads: *QTH_pads
-
-Samtec_QTH-040-xx-x-D-DP-A_P0.5mm_Vertical:
-  <<: *QTH-040-xx-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 38.48, y: -2.03}
-
-## Samtec_QTH-040-xx-x-D-DP-L_P0.5mm_Vertical:
-##   <<: *QTH-040-xx-x-D-DP
-##   add-tags: 'latching'
-##   width: 43.0
-##   holes:
-##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
-## 
-## Samtec_QTH-040-xx-x-D-DP-A-L_P0.5mm_Vertical:
-##   <<: *QTH-040-xx-x-D-DP
-##   add-tags: 'alignment-pins latching'
-##   width: 43.0
-##   holes:
-##     - {drill: 1.0, space: 38.48, y: -2.03}
-##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
-
-# QTH-DP family; 3 banks; differential
-Samtec_QTH-060-xx-x-D-DP_P0.5mm_Vertical: &QTH-060-xx-x-D-DP
-  library: 'Connector_Samtec_QStrip'
-  meta: *QTH-DP_meta
-  layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 3, space: 20.0, width: 16.88, height: 4.0}
-  pads: *QTH_pads
-
-Samtec_QTH-060-xx-x-D-DP-A_P0.5mm_Vertical:
-  <<: *QTH-060-xx-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 58.48, y: -2.03}
-
-# QTH family; 3 banks; application-specific
-Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical:
-  library: 'Connector_Samtec'
-  meta:
-    pn: 'ASP-122952-01'
-    description: >-
-      Samtec {pn:s} HSMC Card {type:s}; modified QTH-090-01-L-D-A, Bank 1
-      differential ({ds:s}); generated with kicad-footprint-generator
-    tags: >-
-      connector Samtec QStrip QPairs HSMC card terminal mezzanine
-      vertical single-ended differential alignment-pins application-specific
-    datasheet: 'http://suddendocs.samtec.com/prints/asp-122952-01-mkt.pdf'
-  layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 1, space: 20.0, width: 16.88, height: 4.0}
-  pads: *QTH_pads
-  holes:
-    - {drill: 1.0, space: 58.48, y: -2.03}
-
-################################################################################
-# QSH family; 1 bank
-Samtec_QSH-030-xx-x-D_P0.5mm_Vertical: &QSH-030-xx-x-D
-  library: 'Connector_Samtec_QStrip'
-  meta: &QSH_meta
-    description: *QStrip_desc
-    tags: 'connector Samtec QStrip QSH mezzanine socket vertical single-ended'
-    datasheet: >-
-      http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-xxx-mkt.pdf,
-      http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-xx-footprint.pdf
-  layout: {type: 'Socket', width: 21.31, height: 7.24}
-  banks: {n: 1, diff: 0, space: 20.0, width: 17.14, height: 3.8}
-  pads: &QSH_pads
-    signal: {n: 60, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
-    planes: #{height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
-      - {n: 2, pitch: 16.13, y: 0, width: 2.54, height: 0.43}
-      - {n: 2, pitch:  6.35, y: 0, width: 4.7,  height: 0.43}
-
-
-Samtec_QSH-030-xx-x-D-A_P0.5mm_Vertical:
-  <<: *QSH-030-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 20.13, y: 2.67}
-
-## Samtec_QSH-030-xx-x-D-LC_P0.5mm_Vertical:
-##   <<: *QSH-030-xx-x-D
-##   add-tags: 'locking-clips'
-##   holes:
-##     - {drill: 1.19, space: 20.13, y: 2.67}
-
-# QSH family; 2 banks
-Samtec_QSH-060-xx-x-D_P0.5mm_Vertical: &QSH-060-xx-x-D
-  library: 'Connector_Samtec_QStrip'
-  meta: *QSH_meta
-  layout: {type: 'Socket', width: 41.31, height: 7.24}
-  banks: {n: 2, diff: 0, space: 20.0, width: 17.14, height: 3.8}
-  pads: *QSH_pads
-
-Samtec_QSH-060-xx-x-D-A_P0.5mm_Vertical:
-  <<: *QSH-060-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 40.13, y: 2.67}
-
-## Samtec_QSH-060-xx-x-D-LC_P0.5mm_Vertical:
-##   <<: *QSH-060-xx-x-D
-##   add-tags: 'locking-clips'
-##   holes:
-##     - {drill: 1.19, space: 40.13, y: 2.67}
-
-# QSH family; 3 banks
-Samtec_QSH-090-xx-x-D_P0.5mm_Vertical: &QSH-090-xx-x-D
-  library: 'Connector_Samtec_QStrip'
-  meta: *QSH_meta
-  layout: {type: 'Socket', width: 61.38, height: 7.24}
-  banks: {n: 3, diff: 0, space: 20.0, width: 17.14, height: 3.8}
-  pads: *QSH_pads
-
-Samtec_QSH-090-xx-x-D-A_P0.5mm_Vertical:
-  <<: *QSH-090-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 60.13, y: 2.67}
-
-## Samtec_QSH-090-xx-x-D-LC_P0.5mm_Vertical:
-##   <<: *QSH-090-xx-x-D
-##   add-tags: 'locking-clips'
-##   holes:
-##     - {drill: 1.19, space: 60.13, y: 2.67}
-
-# QSH-DP family; 1 bank; differential
-Samtec_QSH-020-xx-x-D-DP_P0.5mm_Vertical: &QSH-020-xx-x-D-DP
-  library: 'Connector_Samtec_QStrip'
-  meta: &QSH-DP_meta
-    description: *QPairs_desc
-    tags: 'connector Samtec QPairs QSH mezzanine socket vertical differential'
-    datasheet: >-
-      http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-dp-xxx-mkt.pdf,
-      http://suddendocs.samtec.com/prints/qsh-xxx-xx-x-d-dp-xx-footprint.pdf
-  layout: {type: 'Socket', width: 21.31, height: 7.24}
-  banks: {n: 1, diff: 1, space: 20.0, width: 17.14, height: 3.8}
-  pads: *QSH_pads
-
-Samtec_QSH-020-xx-x-D-DP-A_P0.5mm_Vertical:
-  <<: *QSH-020-xx-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 20.13, y: 2.67}
-
-## Samtec_QSH-020-xx-x-D-DP-LC_P0.5mm_Vertical:
-##   <<: *QSH-020-xx-x-D-DP
-##   add-tags: 'locking-clips'
-##   holes:
-##     - {drill: 1.19, space: 20.13, y: 2.67}
-
-# QSH-DP family; 2 banks; differential
-Samtec_QSH-040-xx-x-D-DP_P0.5mm_Vertical: &QSH-040-xx-x-D-DP
-  library: 'Connector_Samtec_QStrip'
-  meta: *QSH-DP_meta
-  layout: {type: 'Socket', width: 41.31, height: 7.24}
-  banks: {n: 2, diff: 2, space: 20.0, width: 17.14, height: 3.8}
-  pads: *QSH_pads
-
-Samtec_QSH-040-xx-x-D-DP-A_P0.5mm_Vertical:
-  <<: *QSH-040-xx-x-D-DP
-  holes:
-    - {drill: 1.0, space: 40.13, y: 2.67}
-
-## Samtec_QSH-040-xx-x-D-DP-LC_P0.5mm_Vertical:
-##   <<: *QSH-040-xx-x-D-DP
-##   holes:
-##     - {drill: 1.19, space: 40.13, y: 2.67}
-
-# QSH-DP family; 3 banks; differential
-Samtec_QSH-060-xx-x-D-DP_P0.5mm_Vertical: &QSH-060-xx-x-D-DP
-  library: 'Connector_Samtec_QStrip'
-  meta: *QSH-DP_meta
-  layout: {type: 'Socket', width: 61.38, height: 7.24}
-  banks: {n: 3, diff: 3, space: 20.0, width: 17.14, height: 3.8}
-  pads: *QSH_pads
-
-Samtec_QSH-060-xx-x-D-DP-A_P0.5mm_Vertical:
-  <<: *QSH-060-xx-x-D-DP
-  holes:
-    - {drill: 1.0, space: 60.13, y: 2.67}
-
-## Samtec_QSH-060-xx-x-D-DP-LC_P0.5mm_Vertical:
-##   <<: *QSH-060-xx-x-D-DP
-##   holes:
-##     - {drill: 1.19, space: 60.13, y: 2.67}
-
-# QSH family; 3 banks; specialized
-Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical:
-  library: 'Connector_Samtec'
-  meta:
-    pn: 'ASP-122953-01'
-    description: >-
-      Samtec {pn:s} HSMC Host {type:s}; modified QSH-090-01-L-D-A, Bank 1
-      differential ({ds:s}); generated with kicad-footprint-generator
-    tags: >-
-      connector Samtec QSeries QStrip QPairs HSMC host socket mezzanine
-      vertical single-ended differential application-specific
-    datasheet: 'http://suddendocs.samtec.com/prints/asp-122953-01-mkt.pdf'
-  layout: {type: 'Socket', width: 61.38, height: 7.24}
-  banks: {n: 3, diff: 1, space: 20.0, width: 17.14, height: 3.8}
-  pads: *QSH_pads
-  holes:
-    - {drill: 1.0, space: 60.13, y: 2.67}
-
-################################################################################
-# QTS family; 1 bank
-Samtec_QTS-025-xx-x-D_P0.635mm_Vertical: &QTS-025-xx-x-D
-  library: 'Connector_Samtec_QStrip'
-  meta: &QTS_meta
-    description: *QStrip_desc
-    tags: 'connector Samtec QStrip QTS mezzanine terminal vertical'
-    datasheet: >-
-      http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-xxx-mkt.pdf,
-      http://suddendocs.samtec.com/prints/qts-xxx-xx-x-d-xx-footprint.pdf
-  layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 20.0, width: 16.88, height: 4.0}
-  pads: &QTS_pads
-    signal: {n: 50, pitch: 0.635, y: 3.086, width: 0.406, height: 1.45}
-    planes: #{height: 0.635, width: [2.54, 4.7], space: [16.89, 6.35]}
-      - {n: 2, pitch: 16.89, y: 0, width: 2.54, height: 0.635}
-      - {n: 2, pitch:  6.35, y: 0, width: 4.7,  height: 0.635}
-
-Samtec_QTS-025-xx-x-D-A_P0.635mm_Vertical:
-  <<: *QTS-025-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 18.48, y: -2.03}
-
-# QTS family; 2 banks
-Samtec_QTS-050-xx-x-D_P0.635mm_Vertical: &QTS-050-xx-x-D
-  library: 'Connector_Samtec_QStrip'
-  meta: *QTS_meta
-  layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 0, space: 20.0, width: 16.88, height: 4.0}
-  pads: *QTS_pads
-
-Samtec_QTS-050-xx-x-D-A_P0.635mm_Vertical:
-  <<: *QTS-050-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 38.48, y: -2.03}
-
-# QTS family; 3 banks
-Samtec_QTS-075-xx-x-D_P0.635mm_Vertical: &QTS-075-xx-x-D
-  library: 'Connector_Samtec_QStrip'
-  meta: *QTS_meta
-  layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 0, space: 20.0, width: 16.88, height: 4.0}
-  pads: *QTS_pads
-
-Samtec_QTS-075-xx-x-D-A_P0.635mm_Vertical:
-  <<: *QTS-075-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 58.48, y: -2.03}
-
-# QTS-DP family; 1 bank; differential
-Samtec_QTS-016-xx-x-D-DP_P0.635mm_Vertical: &QTS-016-xx-x-D-DP
-  library: 'Connector_Samtec_QStrip'
-  meta: &QTS-DP_meta
-    description: *QPairs_desc
-    tags: 'connector Samtec QPairs QTS mezzanine terminal vertical differential'
-    datasheet: >-
-      http://suddendocs.samtec.com/prints/qts-xxx-xx-xxx-d-dp-xx-mkt.pdf,
-      http://suddendocs.samtec.com/prints/qts-xxx-xx-x-d-dp-xx-footprint.pdf
-  layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 1, space: 20.0, width: 16.88, height: 4.0}
-  pads: *QTS_pads
-
-Samtec_QTS-016-xx-x-D-DP-A_P0.635mm_Vertical:
-  <<: *QTS-016-xx-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 18.48, y: -2.03}
-
-## Samtec_QTS-016-xx-x-D-DP-LC_P0.635mm_Vertical:
-##   <<: *QTS-016-xx-x-D-DP
-##   add-tags: 'locking-clips'
-##   holes:
-##     - {drill: 1.16, space: 18.48, y: -2.03}
-
-# QTS-DP family; 2 banks; differential
-Samtec_QTS-032-xx-x-D-DP_P0.635mm_Vertical: &QTS-032-xx-x-D-DP
-  library: 'Connector_Samtec_QStrip'
-  meta: *QTS-DP_meta
-  layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 2, space: 20.0, width: 16.88, height: 4.0}
-  pads: *QTS_pads
-
-Samtec_QTS-032-xx-x-D-DP-A_P0.635mm_Vertical:
-  <<: *QTS-032-xx-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 38.48, y: -2.03}
-
-## Samtec_QTS-032-xx-x-D-DP-LC_P0.635mm_Vertical:
-##   <<: *QTS-032-xx-x-D-DP
-##   add-tags: 'locking-clips'
-##   holes:
-##     - {drill: 1.16, space: 38.48, y: -2.03}
-
-# QTS-DP family; 3 banks; differential
-Samtec_QTS-048-xx-x-D-DP_P0.635mm_Vertical: &QTS-048-xx-x-D-DP
-  library: 'Connector_Samtec_QStrip'
-  meta: *QTS-DP_meta
-  layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 3, space: 20.0, width: 16.88, height: 4.0}
-  pads: *QTS_pads
-
-Samtec_QTS-048-xx-x-D-DP-A_P0.635mm_Vertical:
-  <<: *QTS-048-xx-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 58.48, y: -2.03}
-
-## Samtec_QTS-048-xx-x-D-DP-LC_P0.635mm_Vertical:
-##   <<: *QTS-048-xx-x-D-DP
-##   add-tags: 'locking-clips'
-##   holes:
-##     - {drill: 1.16, space: 58.48, y: -2.03}
-
-################################################################################
-# QSS family; 1 bank
-Samtec_QSS-025-xx-x-D_P0.635mm_Vertical: &QSS-025-xx-x-D
-  library: 'Connector_Samtec_QStrip'
-  meta: &QSS_meta
-    description: *QStrip_desc
-    tags: 'connector Samtec QStrip QSS mezzanine socket vertical single-ended'
-    datasheet: >-
-      http://suddendocs.samtec.com/prints/qss-xxx-xx-xxx-d-xxx-mkt.pdf,
-      http://suddendocs.samtec.com/prints/qss-xxx-xx-x-d-xx-footprint.pdf
-  layout: {type: 'Socket', width: 21.27, height: 7.24}
-  banks: {n: 1, diff: 0, space: 20.0, width: 16.64, height: 3.66}
-  pads: &QSS_pads
-    signal: {n: 50, pitch: 0.635, y: 2.865, width: 0.406, height: 2.273}
-    planes: #{height: 0.432, width: [2.8, 4.7], space: [16.13, 6.35]}
-      - {n: 2, pitch: 16.13, y: 0, width: 2.8, height: 0.432}
-      - {n: 2, pitch:  6.35, y: 0, width: 4.7, height: 0.432}
-
-Samtec_QSS-025-xx-x-D-A_P0.635mm_Vertical:
-  <<: *QSS-025-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 20.0, y: 2.67}
-
-# QSS family; 2 banks
-Samtec_QSS-050-xx-x-D_P0.635mm_Vertical: &QSS-050-xx-x-D
-  library: 'Connector_Samtec_QStrip'
-  meta: *QSS_meta
-  layout: {type: 'Socket', width: 41.28, height: 7.24}
-  banks: {n: 2, diff: 0, space: 20.0, width: 16.64, height: 3.66}
-  pads: *QSS_pads
-
-Samtec_QSS-050-xx-x-D-A_P0.635mm_Vertical:
-  <<: *QSS-050-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 40.0, y: 2.67}
-
-# QSS family; 3 banks
-Samtec_QSS-075-xx-x-D_P0.635mm_Vertical: &QSS-075-xx-x-D
-  library: 'Connector_Samtec_QStrip'
-  meta: *QSS_meta
-  layout: {type: 'Socket', width: 61.28, height: 7.24}
-  banks: {n: 3, diff: 0, space: 20.0, width: 16.64, height: 3.66}
-  pads: *QSS_pads
-
-Samtec_QSS-075-xx-x-D-A_P0.635mm_Vertical:
-  <<: *QSS-075-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 60.0, y: 2.67}
-
-# QSS-DP family; 1 bank; differential
-Samtec_QSS-016-xx-x-D-DP_P0.635mm_Vertical: &QSS-016-xx-x-D-DP
-  library: 'Connector_Samtec_QStrip'
-  meta: &QSS-DP_meta
-    description: *QPairs_desc
-    tags: 'connector Samtec QPairs QSS mezzanine socket vertical differential'
-    datasheet: >-
-      http://suddendocs.samtec.com/prints/qss-xxx-xx-xxx-d-dp-xxx-mkt.pdf,
-      http://suddendocs.samtec.com/prints/qss-xxx-xx-x-d-dp-xx-footprint.pdf
-  layout: {type: 'Socket', width: 21.27, height: 7.24}
-  banks: {n: 1, diff: 1, space: 20.0, width: 16.64, height: 3.66}
-  pads: *QSS_pads
-
-Samtec_QSS-016-xx-x-D-DP-A_P0.635mm_Vertical:
-  <<: *QSS-016-xx-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 20.0, y: 2.67}
-
-## Samtec_QSS-016-xx-x-D-DP-LC_P0.635mm_Vertical:
-##   <<: *QSS-016-xx-x-D-DP
-##   add-tags: 'locking-clips'
-##   holes:
-##     - {drill: 1.16, space: 20.0, y: 2.67}
-
-# QSS-DP family; 2 banks; differential
-Samtec_QSS-032-xx-x-D-DP_P0.635mm_Vertical: &QSS-032-xx-x-D-DP
-  library: 'Connector_Samtec_QStrip'
-  meta: *QSS-DP_meta
-  layout: {type: 'Socket', width: 41.28, height: 7.24}
-  banks: {n: 2, diff: 2, space: 20.0, width: 16.64, height: 3.66}
-  pads: *QSS_pads
-
-Samtec_QSS-032-xx-x-D-DP-A_P0.635mm_Vertical:
-  <<: *QSS-032-xx-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 40.0, y: 2.67}
-
-## Samtec_QSS-032-xx-x-D-DP-LC_P0.635mm_Vertical:
-##   <<: *QSS-032-xx-x-D-DP
-##   add-tags: 'locking-clips'
-##   holes:
-##     - {drill: 1.16, space: 40.0, y: 2.67}
-
-# QSS-DP family; 3 banks; differential
-Samtec_QSS-048-xx-x-D-DP_P0.635mm_Vertical: &QSS-048-xx-x-D-DP
-  library: 'Connector_Samtec_QStrip'
-  meta: *QSS-DP_meta
-  layout: {type: 'Socket', width: 61.28, height: 7.24}
-  banks: {n: 3, diff: 3, space: 20.0, width: 16.64, height: 3.66}
-  pads: *QSS_pads
-
-Samtec_QSS-048-xx-x-D-DP-A_P0.635mm_Vertical:
-  <<: *QSS-048-xx-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 60.0, y: 2.67}
-
-## Samtec_QSS-048-xx-x-D-DP-LC_P0.635mm_Vertical:
-##   <<: *QSS-048-xx-x-D-DP
-##   add-tags: 'locking-clips'
-##   holes:
-##     - {drill: 1.16, space: 60.0, y: 2.67}
-
-################################################################################
-# QTE family; 1 bank
-Samtec_QTE-020-xx-x-D_P0.8mm_Vertical: &QTE-020-xx-x-D
-  library: 'Connector_Samtec_QStrip'
-  meta: &QTE_meta
-    description: *QStrip_desc
-    tags: 'connector Samtec QStrip QTE mezzanine terminal vertical'
-    datasheet: >-
-      http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-xxx-mkt.pdf,
-      http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-xxx-footprint.pdf
-  layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 20.0, width: 16.88, height: 4.0}
-  pads: &QTE_pads
-    signal: {n: 40, pitch: 0.8, y: 2.98, width: 0.46, height: 1.94}
-    planes: #{height: 0.64, width: [2.54, 4.7], space: [16.89, 6.35]}
-      - {n: 2, pitch: 16.89, y: 0, width: 2.54, height: 0.64}
-      - {n: 2, pitch:  6.35, y: 0, width: 4.7,  height: 0.64}
-
-Samtec_QTE-020-xx-x-D-A_P0.8mm_Vertical:
-  <<: *QTE-020-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 18.48, y: -2.03}
-
-## Samtec_QTE-020-xx-x-D-A-L_P0.8mm_Vertical:
-##   <<: *QTE-020-xx-x-D
-##   add-tags: 'alignment-pins latching'
-##   width: 23.0
-##   holes:
-##     - {drill: 1.0, space: 18.48, y: -2.03}
-##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.508}
-
-# QTE family; 2 banks
-Samtec_QTE-040-xx-x-D_P0.8mm_Vertical: &QTE-040-xx-x-D
-  library: 'Connector_Samtec_QStrip'
-  meta: *QTE_meta
-  layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 0, space: 20.0, width: 16.88, height: 4.0}
-  pads: *QTE_pads
-
-Samtec_QTE-040-xx-x-D-A_P0.8mm_Vertical:
-  <<: *QTE-040-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 38.48, y: -2.03}
-
-## Samtec_QTE-040-xx-x-D-A-L_P0.8mm_Vertical:
-##   <<: *QTE-040-xx-x-D
-##   add-tags: 'alignment-pins latching'
-##   width: 43.0
-##   holes:
-##     - {drill: 1.0, space: 38.48, y: -2.03}
-##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.508}
-
-# QTE family; 3 banks
-Samtec_QTE-060-xx-x-D_P0.8mm_Vertical: &QTE-060-xx-x-D
-  library: 'Connector_Samtec_QStrip'
-  meta: *QTE_meta
-  layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 0, space: 20.0, width: 16.88, height: 4.0}
-  pads: *QTE_pads
-
-Samtec_QTE-060-xx-x-D-A_P0.8mm_Vertical:
-  <<: *QTE-060-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 58.48, y: -2.03}
-
-# QTE-DP family; 1 bank; differential
-Samtec_QTE-014-xx-x-D-DP_P0.8mm_Vertical: &QTE-014-xx-x-D-DP
-  library: 'Connector_Samtec_QStrip'
-  meta: &QTE-DP_meta
-    description: *QPairs_desc
-    tags: 'connector Samtec QPairs QTE mezzanine terminal vertical differential'
-    datasheet: >-
-      http://suddendocs.samtec.com/prints/qte-xxx-xx-xxx-d-dp-xxx-mkt.pdf,
-      http://suddendocs.samtec.com/prints/qte-xxx-xx-x-d-dp-xx-footprint.pdf
-  layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 1, space: 20.0, width: 16.88, height: 4.0}
-  pads: *QTE_pads
-
-Samtec_QTE-014-xx-x-D-DP-A_P0.8mm_Vertical:
-  <<: *QTE-014-xx-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 18.48, y: -2.03}
-
-## Samtec_QTE-014-xx-x-D-DP-A-L_P0.8mm_Vertical:
-##   <<: *QTE-014-xx-x-D-DP
-##   add-tags: 'alignment-pins latching'
-##   width: 23.0
-##   holes:
-##     - {drill: 1.0, space: 18.48, y: -2.03}
-##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 21.69, y: -0.51}
-
-# QTE-DP family; 2 banks; differential
-Samtec_QTE-028-xx-x-D-DP_P0.8mm_Vertical: &QTE-028-xx-x-D-DP
-  library: 'Connector_Samtec_QStrip'
-  meta: *QTE-DP_meta
-  layout: {type: 'Terminal', width: 40.0, height: 5.97}
-  banks: {n: 2, diff: 2, space: 20.0, width: 16.88, height: 4.0}
-  pads: *QTE_pads
-
-Samtec_QTE-028-xx-x-D-DP-A_P0.8mm_Vertical:
-  <<: *QTE-028-xx-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 38.48, y: -2.03}
-
-## Samtec_QTE-028-xx-x-D-DP-A-L_P0.8mm_Vertical:
-##   <<: *QTE-028-xx-x-D-DP
-##   add-tags: 'alignment-pins latching'
-##   width: 23.0
-##   holes:
-##     - {drill: 1.0, space: 38.48, y: -2.03}
-##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 41.69, y: -0.51}
-
-# QTE-DP family; 3 banks; differential
-Samtec_QTE-042-xx-x-D-DP_P0.8mm_Vertical: &QTE-042-xx-x-D-DP
-  library: 'Connector_Samtec_QStrip'
-  meta: *QTE-DP_meta
-  layout: {type: 'Terminal', width: 60.0, height: 5.97}
-  banks: {n: 3, diff: 3, space: 20.0, width: 16.88, height: 4.0}
-  pads: *QTE_pads
-
-Samtec_QTE-042-xx-x-D-DP-A_P0.8mm_Vertical:
-  <<: *QTE-042-xx-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 58.48, y: -2.03}
-
-################################################################################
-# QSE family; 1 bank
-Samtec_QSE-020-xx-x-D_P0.8mm_Vertical: &QSE-020-xx-x-D
-  library: 'Connector_Samtec_QStrip'
-  meta: &QSE_meta
-    description: *QStrip_desc
-    tags: 'connector Samtec QStrip QSE mezzanine socket vertical single-ended'
-    datasheet: >-
-      http://suddendocs.samtec.com/prints/qse-xxx-xx-xxx-d-xxx-mkt.pdf,
-      http://suddendocs.samtec.com/prints/qse-xxx-xx-x-d-xx-footprint.pdf
-  layout: {type: 'Socket', width: 21.27, height: 7.24}
-  banks: {n: 1, diff: 0, space: 20.0, width: 16.34, height: 3.8}
-  pads: &QSE_pads
-    signal: {n: 40, pitch: 0.8, y: 2.87, width: 0.41, height: 2.27}
-    planes: #{height: 0.43, width: [2.54, 4.7], space: [16.13, 6.35]}
-      - {n: 2, pitch: 16.13, y: 0, width: 2.54, height: 0.43}
-      - {n: 2, pitch:  6.35, y: 0, width: 4.7,  height: 0.43}
-
-Samtec_QSE-020-xx-x-D-A_P0.8mm_Vertical:
-  <<: *QSE-020-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 20.13, y: 2.67}
-
-## Samtec_QSE-020-xx-x-D-A-L_P0.8mm_Vertical:
-##   <<: *QSE-020-xx-x-D
-##   add-tags: 'alignment-pins latching'
-##   width: 26.61
-##   holes:
-##     - {drill: 1.0, space: 20.13, y: 2.67}
-##     - {drill: [0.5, 1.15], pad: [1.0, 1.65], space: 24.36, y: -0.51}
-
-# QSE family; 2 banks
-Samtec_QSE-040-xx-x-D_P0.8mm_Vertical: &QSE-040-xx-x-D
-  library: 'Connector_Samtec_QStrip'
-  meta: *QSE_meta
-  layout: {type: 'Socket', width: 41.28, height: 7.24}
-  banks: {n: 2, diff: 0, space: 20.0, width: 16.34, height: 3.8}
-  pads: *QSE_pads
-
-Samtec_QSE-040-xx-x-D-A_P0.8mm_Vertical:
-  <<: *QSE-040-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 40.13, y: 2.67}
-
-# QSE family; 3 banks
-Samtec_QSE-060-xx-x-D_P0.8mm_Vertical: &QSE-060-xx-x-D
-  library: 'Connector_Samtec_QStrip'
-  meta: *QSE_meta
-  layout: {type: 'Socket', width: 61.28, height: 7.24}
-  banks: {n: 3, diff: 0, space: 20.0, width: 16.34, height: 3.8}
-  pads: *QSE_pads
-
-Samtec_QSE-060-xx-x-D-A_P0.8mm_Vertical:
-  <<: *QSE-060-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 60.13, y: 2.67}
-
-# QSE-DP family; 1 bank; differential
-Samtec_QSE-014-xx-x-D-DP_P0.8mm_Vertical: &QSE-014-xx-x-D-DP
-  library: 'Connector_Samtec_QStrip'
-  meta: &QSE-DP_meta
-    description: *QPairs_desc
-    tags: 'connector Samtec QPairs QSE mezzanine socket vertical differential'
-    datasheet: >-
-      http://suddendocs.samtec.com/prints/qse-xxx-xx-xxx-d-dp-xxx-xxxxx-mkt.pdf,
-      http://suddendocs.samtec.com/prints/qse-xxx-xx-x-d-dp-xxx-footprint.pdf
-  layout: {type: 'Socket', width: 21.27, height: 7.24}
-  banks: {n: 1, diff: 1, space: 20.0, width: 16.34, height: 3.8}
-  pads: *QSE_pads
-
-Samtec_QSE-014-xx-x-D-DP-A_P0.8mm_Vertical:
-  <<: *QSE-014-xx-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 20.13, y: 2.67}
-
-# QSE-DP family; 2 banks; differential
-Samtec_QSE-028-xx-x-D-DP_P0.8mm_Vertical: &QSE-028-xx-x-D-DP
-  library: 'Connector_Samtec_QStrip'
-  meta: *QSE-DP_meta
-  layout: {type: 'Socket', width: 41.28, height: 7.24}
-  banks: {n: 2, diff: 2, space: 20.0, width: 16.34, height: 3.8}
-  pads: *QSE_pads
-
-Samtec_QSE-028-xx-x-D-DP-A_P0.8mm_Vertical:
-  <<: *QSE-028-xx-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 40.13, y: 2.67}
-
-# QSE-DP family; 3 banks; differential
-Samtec_QSE-042-xx-x-D-DP_P0.8mm_Vertical: &QSE-042-xx-x-D-DP
-  library: 'Connector_Samtec_QStrip'
-  meta: *QSE-DP_meta
-  layout: {type: 'Socket', width: 61.28, height: 7.24}
-  banks: {n: 3, diff: 3, space: 20.0, width: 16.34, height: 3.8}
-  pads: *QSE_pads
-
-Samtec_QSE-042-xx-x-D-DP-A_P0.8mm_Vertical:
-  <<: *QSE-042-xx-x-D-DP
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 60.13, y: 2.67}

From bcab8b97f6145cdaaaa9cb0cc3681b6ae7e543c1 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Mon, 24 Aug 2020 15:30:45 -0700
Subject: [PATCH 48/62] Create BasicBladeAndBeam_Vertical.json

---
 .../BasicBladeAndBeam_Vertical.json           | 75 +++++++++++++++++++
 1 file changed, 75 insertions(+)
 create mode 100644 scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.json

diff --git a/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.json b/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.json
new file mode 100644
index 000000000..a800889e7
--- /dev/null
+++ b/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.json
@@ -0,0 +1,75 @@
+{
+    "Samtec_BTH-030-xx-x-D_P0.5mm_Vertical": {
+        "library": "Connector_Samtec_BasicBladeAndBeam",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Basic Blade & Beam {type:s}; {pins:d} pins ({ds:s}); generated with kicad-footprint-generator",
+            "datasheet": "http://suddendocs.samtec.com/catalog_english/bth.pdf",
+            "tags": "connector Samtec BTH mezzanine terminal vertical"
+        },
+        "layout": {"type": "Terminal", "width": 20.0, "height": 5.97},
+        "banks": {"n": 1, "diff": 0, "space": 0, "width": 16.888, "height": 3.94},
+        "pads": {
+            "signal": {"n": 60, "pitch": 0.5, "width": 0.305, "height": 1.45, "y": 3.086}
+        }
+    },
+    "Samtec_BTH-030-xx-x-D-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-030-xx-x-D_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 18.475, "y": -2.032}]
+    },
+    "Samtec_BTH-050-xx-x-D_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-030-xx-x-D_P0.5mm_Vertical",
+        "layout": {"width": 30.0},
+        "banks": {"width": 26.888},
+        "pads": {"signal": {"n": 100}}
+    },
+    "Samtec_BTH-050-xx-x-D-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-050-xx-x-D_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 28.475, "y": -2.032}]
+    },
+    "Samtec_BTH-060-xx-x-D_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-030-xx-x-D_P0.5mm_Vertical",
+        "layout": {"width": 35.0},
+        "banks": {"width": 31.888},
+        "pads": {"signal": {"n": 120}}
+    },
+    "Samtec_BTH-060-xx-x-D-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-060-xx-x-D_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 33.475, "y": -2.032}]
+    },
+    "Samtec_BTH-090-xx-x-D_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-030-xx-x-D_P0.5mm_Vertical",
+        "layout": {"width": 50.0},
+        "banks": {"width": 46.888},
+        "pads": {"signal": {"n": 180}}
+    },
+    "Samtec_BTH-090-xx-x-D-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-090-xx-x-D_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 48.475, "y": -2.032}]
+    },
+    "Samtec_BTH-120-xx-x-D_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-030-xx-x-D_P0.5mm_Vertical",
+        "layout": {"width": 65.0},
+        "banks": {"width": 61.888},
+        "pads": {"signal": {"n": 240}}
+    },
+    "Samtec_BTH-120-xx-x-D-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-120-xx-x-D_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 63.475, "y": -2.032}]
+    },
+    "Samtec_BTH-150-xx-x-D_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-030-xx-x-D_P0.5mm_Vertical",
+        "layout": {"width": 80.0},
+        "banks": {"width": 76.888},
+        "pads": {"signal": {"n": 300}}
+    },
+    "Samtec_BTH-150-xx-x-D-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-150-xx-x-D_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 78.475, "y": -2.032}]
+    }
+}

From 58b84229c8ae12387e07dc217d1bef1e23e307dc Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Tue, 25 Aug 2020 19:43:52 -0700
Subject: [PATCH 49/62] Add BSH series to BasicBladeAndBeam_Vertical.json

---
 .../BasicBladeAndBeam_Vertical.json           | 74 +++++++++++++++++++
 1 file changed, 74 insertions(+)

diff --git a/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.json b/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.json
index a800889e7..cad30a739 100644
--- a/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.json
+++ b/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.json
@@ -71,5 +71,79 @@
         "inherit": "Samtec_BTH-150-xx-x-D_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 78.475, "y": -2.032}]
+    },
+
+    "Samtec_BSH-030-xx-x-D_P0.5mm_Vertical": {
+        "library": "Connector_Samtec_BasicBladeAndBeam",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Basic Blade & Beam {type:s}; {pins:d} pins ({ds:s}); generated with kicad-footprint-generator",
+            "datasheet": "http://suddendocs.samtec.com/catalog_english/bsh.pdf",
+            "tags": "connector Samtec BSH mezzanine socket vertical"
+        },
+        "layout": {"type": "Socket", "width": 21.27, "height": 7.24},
+        "banks": {"n": 1, "diff": 0, "space": 0, "width": 16.6, "height": 3.81},
+        "pads": {
+            "signal": {"n": 60, "pitch": 0.5, "width": 0.279, "height": 2.273, "y": 2.865}
+        }
+    },
+    "Samtec_BSH-030-xx-x-D-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-030-xx-x-D_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 20.126, "y": 2.67}]
+    },
+    "Samtec_BSH-050-xx-x-D_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-030-xx-x-D_P0.5mm_Vertical",
+        "layout": {"width": 31.27},
+        "banks": {"width": 26.6},
+        "pads": {"signal": {"n": 100}}
+    },
+    "Samtec_BSH-050-xx-x-D-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-050-xx-x-D_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 30.126, "y": 2.67}]
+    },
+    "Samtec_BSH-060-xx-x-D_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-030-xx-x-D_P0.5mm_Vertical",
+        "layout": {"width": 36.27},
+        "banks": {"width": 31.6},
+        "pads": {"signal": {"n": 120}}
+    },
+    "Samtec_BSH-060-xx-x-D-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-060-xx-x-D_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 35.126, "y": 2.67}]
+    },
+    "Samtec_BSH-090-xx-x-D_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-030-xx-x-D_P0.5mm_Vertical",
+        "layout": {"width": 51.27},
+        "banks": {"width": 46.6},
+        "pads": {"signal": {"n": 180}}
+    },
+    "Samtec_BSH-090-xx-x-D-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-090-xx-x-D_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 50.126, "y": 2.67}]
+    },
+    "Samtec_BSH-120-xx-x-D_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-030-xx-x-D_P0.5mm_Vertical",
+        "layout": {"width": 66.27},
+        "banks": {"width": 61.6},
+        "pads": {"signal": {"n": 240}}
+    },
+    "Samtec_BSH-120-xx-x-D-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-120-xx-x-D_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 65.126, "y": 2.67}]
+    },
+    "Samtec_BSH-150-xx-x-D_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-030-xx-x-D_P0.5mm_Vertical",
+        "layout": {"width": 81.27},
+        "banks": {"width": 76.6},
+        "pads": {"signal": {"n": 300}}
+    },
+    "Samtec_BSH-150-xx-x-D-A_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-150-xx-x-D_P0.5mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 80.126, "y": 2.67}]
     }
 }

From 99b9854fc4e13095309cb8d9b4e5b161ad64f17d Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Fri, 28 Aug 2020 20:12:31 -0700
Subject: [PATCH 50/62] + Add BTS/BSS and BTE/BSE families to
 BasicBladeAndBeam_Vertical.json - Delete BasicBladeAndBeam_Vertical.yaml

---
 .../BasicBladeAndBeam_Vertical.json           | 252 +++++++++
 .../BasicBladeAndBeam_Vertical.yaml           | 506 ------------------
 .../Connector_Samtec/QStrip_Vertical.json     |   2 +-
 3 files changed, 253 insertions(+), 507 deletions(-)
 delete mode 100644 scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml

diff --git a/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.json b/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.json
index cad30a739..eb56d8263 100644
--- a/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.json
+++ b/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.json
@@ -145,5 +145,257 @@
         "inherit": "Samtec_BSH-150-xx-x-D_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 80.126, "y": 2.67}]
+    },
+
+    "Samtec_BTS-025-xx-x-D_P0.635mm_Vertical": {
+        "library": "Connector_Samtec_BasicBladeAndBeam",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.3f}mm Basic Blade & Beam {type:s}; {pins:d} pins ({ds:s}); generated with kicad-footprint-generator",
+            "datasheet": "http://suddendocs.samtec.com/catalog_english/bts.pdf",
+            "tags": "connector Samtec BTS mezzanine terminal vertical"
+        },
+        "layout": {"type": "Terminal", "width": 20.0, "height": 5.97},
+        "banks": {"n": 1, "diff": 0, "space": 0, "width": 16.895, "height": 3.94},
+        "pads": {
+            "signal": {"n": 50, "pitch": 0.635, "width": 0.432, "height": 1.45, "y": 3.086}
+        }
+    },
+    "Samtec_BTS-025-xx-x-D-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_BTS-025-xx-x-D_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 18.48, "y": -2.032}]
+    },
+    "Samtec_BTS-050-xx-x-D_P0.635mm_Vertical": {
+        "inherit": "Samtec_BTS-025-xx-x-D_P0.635mm_Vertical",
+        "layout": {"width": 35.88},
+        "banks": {"width": 32.77},
+        "pads": {"signal": {"n": 100}}
+    },
+    "Samtec_BTS-050-xx-x-D-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_BTS-050-xx-x-D_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 34.35, "y": -2.032}]
+    },
+    "Samtec_BTS-075-xx-x-D_P0.635mm_Vertical": {
+        "inherit": "Samtec_BTS-025-xx-x-D_P0.635mm_Vertical",
+        "layout": {"width": 51.76},
+        "banks": {"width": 48.65},
+        "pads": {"signal": {"n": 150}}
+    },
+    "Samtec_BTS-075-xx-x-D-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_BTS-075-xx-x-D_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 50.23, "y": -2.032}]
+    },
+    "Samtec_BTS-100-xx-x-D_P0.635mm_Vertical": {
+        "inherit": "Samtec_BTS-025-xx-x-D_P0.635mm_Vertical",
+        "layout": {"width": 67.63},
+        "banks": {"width": 64.52},
+        "pads": {"signal": {"n": 200}}
+    },
+    "Samtec_BTS-100-xx-x-D-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_BTS-100-xx-x-D_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 66.10, "y": -2.032}]
+    },
+
+    "Samtec_BSS-025-xx-x-D_P0.635mm_Vertical": {
+        "library": "Connector_Samtec_BasicBladeAndBeam",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.3f}mm Basic Blade & Beam {type:s}; {pins:d} pins ({ds:s}); generated with kicad-footprint-generator",
+            "datasheet": "http://suddendocs.samtec.com/catalog_english/bss.pdf",
+            "tags": "connector Samtec BSS mezzanine socket vertical"
+        },
+        "layout": {"type": "Socket", "width": 21.27, "height": 7.24},
+        "banks": {"n": 1, "diff": 0, "space": 0, "width": 16.64, "height": 3.81},
+        "pads": {
+            "signal": {"n": 50, "pitch": 0.635, "width": 0.406, "height": 2.273, "y": 2.865}
+        }
+    },
+    "Samtec_BSS-025-xx-x-D-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_BSS-025-xx-x-D_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 20.00, "y": 2.67}]
+    },
+    "Samtec_BSS-050-xx-x-D_P0.635mm_Vertical": {
+        "inherit": "Samtec_BSS-025-xx-x-D_P0.635mm_Vertical",
+        "layout": {"width": 37.15},
+        "banks": {"width": 32.52},
+        "pads": {"signal": {"n": 100}}
+    },
+    "Samtec_BSS-050-xx-x-D-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_BSS-050-xx-x-D_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 35.88, "y": 2.67}]
+    },
+    "Samtec_BSS-075-xx-x-D_P0.635mm_Vertical": {
+        "inherit": "Samtec_BSS-025-xx-x-D_P0.635mm_Vertical",
+        "layout": {"width": 53.02},
+        "banks": {"width": 48.39},
+        "pads": {"signal": {"n": 150}}
+    },
+    "Samtec_BSS-075-xx-x-D-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_BSS-075-xx-x-D_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 51.75, "y": 2.67}]
+    },
+    "Samtec_BSS-100-xx-x-D_P0.635mm_Vertical": {
+        "inherit": "Samtec_BSS-025-xx-x-D_P0.635mm_Vertical",
+        "layout": {"width": 68.90},
+        "banks": {"width": 64.27},
+        "pads": {"signal": {"n": 200}}
+    },
+    "Samtec_BSS-100-xx-x-D-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_BSS-100-xx-x-D_P0.635mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 67.63, "y": 2.67}]
+    },
+    
+    "Samtec_BTE-020-xx-x-D_P0.8mm_Vertical": {
+        "library": "Connector_Samtec_BasicBladeAndBeam",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Basic Blade & Beam {type:s}; {pins:d} pins ({ds:s}); generated with kicad-footprint-generator",
+            "datasheet": "http://suddendocs.samtec.com/catalog_english/bte.pdf",
+            "tags": "connector Samtec BTE mezzanine terminal vertical"
+        },
+        "layout": {"type": "Terminal", "width": 20.0, "height": 5.97},
+        "banks": {"n": 1, "diff": 0, "space": 0, "width": 16.88, "height": 3.94},
+        "pads": {
+            "signal": {"n": 40, "pitch": 0.8, "width": 0.305, "height": 1.45, "y": 3.086}
+        }
+    },
+    "Samtec_BTE-020-xx-x-D-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-020-xx-x-D_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 18.48, "y": -2.032}]
+    },
+    "Samtec_BTE-040-xx-x-D_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-020-xx-x-D_P0.8mm_Vertical",
+        "layout": {"width": 36.0},
+        "banks": {"width": 32.88},
+        "pads": {"signal": {"n": 80}}
+    },
+    "Samtec_BTE-040-xx-x-D-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-040-xx-x-D_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 34.48, "y": -2.032}]
+    },
+    "Samtec_BTE-060-xx-x-D_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-020-xx-x-D_P0.8mm_Vertical",
+        "layout": {"width": 52.0},
+        "banks": {"width": 48.88},
+        "pads": {"signal": {"n": 120}}
+    },
+    "Samtec_BTE-060-xx-x-D-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-060-xx-x-D_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 50.48, "y": -2.032}]
+    },
+    "Samtec_BTE-080-xx-x-D_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-020-xx-x-D_P0.8mm_Vertical",
+        "layout": {"width": 68.0},
+        "banks": {"width": 64.88},
+        "pads": {"signal": {"n": 160}}
+    },
+    "Samtec_BTE-080-xx-x-D-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-080-xx-x-D_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 66.48, "y": -2.032}]
+    },
+    "Samtec_BTE-100-xx-x-D_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-020-xx-x-D_P0.8mm_Vertical",
+        "layout": {"width": 84.0},
+        "banks": {"width": 80.88},
+        "pads": {"signal": {"n": 200}}
+    },
+    "Samtec_BTE-100-xx-x-D-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-100-xx-x-D_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 82.48, "y": -2.032}]
+    },
+    "Samtec_BTE-120-xx-x-D_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-020-xx-x-D_P0.8mm_Vertical",
+        "layout": {"width": 100.0},
+        "banks": {"width": 96.88},
+        "pads": {"signal": {"n": 240}}
+    },
+    "Samtec_BTE-120-xx-x-D-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-120-xx-x-D_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 98.48, "y": -2.032}]
+    },
+    
+    "Samtec_BSE-020-xx-x-D_P0.8mm_Vertical": {
+        "library": "Connector_Samtec_BasicBladeAndBeam",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Basic Blade & Beam {type:s}; {pins:d} pins ({ds:s}); generated with kicad-footprint-generator",
+            "datasheet": "http://suddendocs.samtec.com/catalog_english/bse.pdf",
+            "tags": "connector Samtec BSE mezzanine socket vertical"
+        },
+        "layout": {"type": "Socket", "width": 21.27, "height": 7.24},
+        "banks": {"n": 1, "diff": 0, "space": 0, "width": 16.64, "height": 3.81},
+        "pads": {
+            "signal": {"n": 40, "pitch": 0.8, "width": 0.41, "height": 2.27, "y": 2.865}
+        }
+    },
+    "Samtec_BSE-020-xx-x-D-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-020-xx-x-D_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 20.13, "y": 2.67}]
+    },
+    "Samtec_BSE-040-xx-x-D_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-020-xx-x-D_P0.8mm_Vertical",
+        "layout": {"width": 37.27},
+        "banks": {"width": 32.64},
+        "pads": {"signal": {"n": 80}}
+    },
+    "Samtec_BSE-040-xx-x-D-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-040-xx-x-D_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 36.13, "y": 2.67}]
+    },
+    "Samtec_BSE-060-xx-x-D_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-020-xx-x-D_P0.8mm_Vertical",
+        "layout": {"width": 53.27},
+        "banks": {"width": 48.64},
+        "pads": {"signal": {"n": 120}}
+    },
+    "Samtec_BSE-060-xx-x-D-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-060-xx-x-D_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 52.13, "y": 2.67}]
+    },
+    "Samtec_BSE-080-xx-x-D_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-020-xx-x-D_P0.8mm_Vertical",
+        "layout": {"width": 69.27},
+        "banks": {"width": 64.64},
+        "pads": {"signal": {"n": 160}}
+    },
+    "Samtec_BSE-080-xx-x-D-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-080-xx-x-D_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 68.13, "y": 2.67}]
+    },
+    "Samtec_BSE-100-xx-x-D_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-020-xx-x-D_P0.8mm_Vertical",
+        "layout": {"width": 85.27},
+        "banks": {"width": 80.64},
+        "pads": {"signal": {"n": 200}}
+    },
+    "Samtec_BSE-100-xx-x-D-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-100-xx-x-D_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 84.13, "y": 2.67}]
+    },
+    "Samtec_BSE-120-xx-x-D_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-020-xx-x-D_P0.8mm_Vertical",
+        "layout": {"width": 101.27},
+        "banks": {"width": 96.64},
+        "pads": {"signal": {"n": 240}}
+    },
+    "Samtec_BSE-120-xx-x-D-A_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-120-xx-x-D_P0.8mm_Vertical",
+        "add-tags": "alignment-pins",
+        "holes": [{"drill": 1.0, "space": 100.13, "y": 2.67}]
     }
 }
diff --git a/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml b/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml
deleted file mode 100644
index cc45f4ce8..000000000
--- a/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.yaml
+++ /dev/null
@@ -1,506 +0,0 @@
-# This file contains footprint specifications the vertical variations of Samtec
-# Basic Blade & Beam connectors. QStrip_QPairs_Vertical.py contains a complete
-# specification of the properties and data types that can be used in this file.
-#
-# Note:
-# - Basic Blade & Beam connectors are very similar to their Q Strip/Q Pairs
-#   counterparts. The only difference is that the Q Strip connectors have an
-#   integrated ground plane.
-# - This file should be passed as an argument to QStrip_Vertical.py
-# 
-
-################################################################################
-# BTH family (0.5mm terminal)
-Samtec_BTH-030-xx-x-D_P0.5mm_Vertical: &BTH-030-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: &BTH_meta
-    description: &desc >-
-      Samtec {pn:s} {pitch:1.2f}mm Basic Blade & Beam {type:s}; {pins:d} pins
-      ({ds:s}); generated with kicad-footprint-generator
-    tags: 'connector Samtec BTH mezzanine terminal vertical'
-    datasheet: >-
-      http://suddendocs.samtec.com/prints/bth-xxx-xx-x-d-xx-mkt.pdf,
-      http://suddendocs.samtec.com/prints/bth-xxx-xx-x-d-xx-footprint.pdf
-  layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 16.888, height: 4.0}
-  pads:
-    signal: {n: 60, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
-
-Samtec_BTH-030-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BTH-030-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: -2.03, space: 18.475}
- 
-Samtec_BTH-050-xx-x-D_P0.5mm_Vertical: &BTH-050-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BTH_meta
-  layout: {type: 'Terminal', width: 30.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 26.888, height: 4.0}
-  pads:
-    signal: {n: 100, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
-
-Samtec_BTH-050-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BTH-050-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: -2.03, space: 28.475}
-
-Samtec_BTH-060-xx-x-D_P0.5mm_Vertical: &BTH-060-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BTH_meta
-  layout: {type: 'Terminal', width: 35.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 31.888, height: 4.0}
-  pads:
-    signal: {n: 120, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
-
-Samtec_BTH-060-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BTH-060-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: -2.03, space: 33.475}
-
-Samtec_BTH-090-xx-x-D_P0.5mm_Vertical: &BTH-090-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BTH_meta
-  layout: {type: 'Terminal', width: 50.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 46.888, height: 4.0}
-  pads:
-    signal: {n: 180, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
-
-Samtec_BTH-090-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BTH-090-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: -2.03, space: 48.475}
-
-Samtec_BTH-120-xx-x-D_P0.5mm_Vertical: &BTH-120-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BTH_meta
-  layout: {type: 'Terminal', width: 65.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 61.888, height: 4.0}
-  pads:
-    signal: {n: 240, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
-
-Samtec_BTH-120-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BTH-120-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: -2.03, space: 63.475}
-
-Samtec_BTH-150-xx-x-D_P0.5mm_Vertical: &BTH-150-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BTH_meta
-  layout: {type: 'Terminal', width: 80.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 76.888, height: 4.0}
-  pads:
-    signal: {n: 300, pitch: 0.5, y: 3.086, width: 0.305, height: 1.45}
-
-Samtec_BTH-150-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BTH-150-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: -2.03, space: 78.475}
-
-################################################################################
-# BSH family (0.5mm socket)
-Samtec_BSH-030-xx-x-D_P0.5mm_Vertical: &BSH-030-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: &BSH_meta
-    description: *desc
-    tags: 'connector Samtec BSH mezzanine socket vertical'
-    datasheet: >-
-      http://suddendocs.samtec.com/prints/bsh-xxx-01-x-d-xx-xx-mkt.pdf,
-      http://suddendocs.samtec.com/prints/bsh-xxx-01-x-d-xx-xx-footprint.pdf
-  layout: {type: 'Socket', width: 21.3, height: 7.24}
-  banks: {n: 1, diff: 0, space: 0, width: 16.6, height: 3.8}
-  pads:
-    signal: {n: 60, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
-
-Samtec_BSH-030-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BSH-030-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: 2.67, space: 20.126}
-
-Samtec_BSH-050-xx-x-D_P0.5mm_Vertical: &BSH-050-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BSH_meta
-  layout: {type: 'Socket', width: 31.3, height: 7.24}
-  banks: {n: 1, diff: 0, space: 0, width: 26.6, height: 3.8}
-  pads:
-    signal: {n: 100, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
-
-Samtec_BSH-050-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BSH-050-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: 2.67, space: 30.126}
-
-Samtec_BSH-060-xx-x-D_P0.5mm_Vertical: &BSH-060-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BSH_meta
-  layout: {type: 'Socket', width: 36.3, height: 7.24}
-  banks: {n: 1, diff: 0, space: 0, width: 31.6, height: 3.8}
-  pads:
-    signal: {n: 120, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
-
-Samtec_BSH-060-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BSH-060-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: 2.67, space: 35.126}
-
-Samtec_BSH-090-xx-x-D_P0.5mm_Vertical: &BSH-090-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BSH_meta
-  layout: {type: 'Socket', width: 51.3, height: 7.24}
-  banks: {n: 1, diff: 0, space: 0, width: 46.6, height: 3.8}
-  pads:
-    signal: {n: 180, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
-
-Samtec_BSH-090-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BSH-090-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: 2.67, space: 50.126}
-
-Samtec_BSH-120-xx-x-D_P0.5mm_Vertical: &BSH-120-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BSH_meta
-  layout: {type: 'Socket', width: 66.3, height: 7.24}
-  banks: {n: 1, diff: 0, space: 0, width: 61.6, height: 3.8}
-  pads:
-    signal: {n: 240, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
-
-Samtec_BSH-120-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BSH-120-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: 2.67, space: 65.126}
-
-Samtec_BSH-150-xx-x-D_P0.5mm_Vertical: &BSH-150-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BSH_meta
-  layout: {type: 'Socket', width: 81.3, height: 7.24}
-  banks: {n: 1, diff: 0, space: 0, width: 76.6, height: 3.8}
-  pads:
-    signal: {n: 300, pitch: 0.5, y: 2.865, width: 0.279, height: 2.27}
-
-Samtec_BSH-150-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BSH-150-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: 2.67, space: 80.126}
-
-################################################################################
-# BTS family (0.635mm terminal)
-Samtec_BTS-025-xx-x-D_P0.5mm_Vertical: &BTS-025-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: &BTS_meta
-    description: >-
-      Samtec {pn:s} {pitch:1.3f}mm Basic Blade & Beam {type:s}; {pins:d} pins
-      ({ds:s}); generated with kicad-footprint-generator
-    tags: 'connector Samtec BTS mezzanine terminal vertical'
-    datasheet: >-
-      http://suddendocs.samtec.com/prints/bts-xxx-xx-x-d-xx-mkt.pdf,
-      http://suddendocs.samtec.com/prints/bts-d.pdf
-  layout: {type: 'Terminal', width: 20.005, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 16.895, height: 4.0}
-  pads:
-    signal: {n: 50, pitch: 0.635, y: 3.086, width: 0.432, height: 1.45}
-
-Samtec_BTS-025-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BTS-025-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: -2.03, space: 18.479}
-
-Samtec_BTS-050-xx-x-D_P0.5mm_Vertical: &BTS-050-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BTS_meta
-  layout: {type: 'Terminal', width: 35.88, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 32.77, height: 4.0}
-  pads:
-    signal: {n: 100, pitch: 0.635, y: 3.086, width: 0.432, height: 1.45}
-
-Samtec_BTS-050-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BTS-050-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: -2.03, space: 34.354}
-
-Samtec_BTS-075-xx-x-D_P0.5mm_Vertical: &BTS-075-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BTS_meta
-  layout: {type: 'Terminal', width: 51.755, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 48.645, height: 4.0}
-  pads:
-    signal: {n: 150, pitch: 0.635, y: 3.086, width: 0.432, height: 1.45}
-
-Samtec_BTS-075-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BTS-075-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: -2.03, space: 50.229}
-
-Samtec_BTS-100-xx-x-D_P0.5mm_Vertical: &BTS-100-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BTS_meta
-  layout: {type: 'Terminal', width: 67.63, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 64.52, height: 4.0}
-  pads:
-    signal: {n: 200, pitch: 0.635, y: 3.086, width: 0.432, height: 1.45}
-
-Samtec_BTS-100-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BTS-100-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: -2.03, space: 66.104}
-
-################################################################################
-# BSS family (0.635mm socket)
-Samtec_BSS-025-xx-x-D_P0.5mm_Vertical: &BSS-025-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: &BSS_meta
-    description: *desc
-    tags: 'connector Samtec BSS mezzanine socket vertical'
-    datasheet: >-
-      http://suddendocs.samtec.com/prints/bss-xxx-01-x-d-xx-mkt.pdf,
-      http://suddendocs.samtec.com/prints/bss-xxx-01-x-d-xx-footprint.pdf
-  layout: {type: 'Socket', width: 21.273, height: 7.24}
-  banks: {n: 1, diff: 0, space: 0, width: 16.64, height: 3.81}
-  pads:
-    signal: {n: 50, pitch: 0.635, y: 2.865, width: 0.41, height: 2.27}
-
-Samtec_BSS-025-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BSS-025-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, space: 20.003, y: 2.67}
-
-Samtec_BSS-050-xx-x-D_P0.5mm_Vertical: &BSS-050-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BSS_meta
-  layout: {type: 'Socket', width: 37.148, height: 7.24}
-  banks: {n: 1, diff: 0, space: 0, width: 32.515, height: 3.81}
-  pads:
-    signal: {n: 100, pitch: 0.635, y: 2.865, width: 0.41, height: 2.27}
-
-Samtec_BSS-050-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BSS-050-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: 2.67, space: 35.878}
-
-Samtec_BSS-075-xx-x-D_P0.5mm_Vertical: &BSS-075-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BSS_meta
-  layout: {type: 'Socket', width: 53.023, height: 7.24}
-  banks: {n: 1, diff: 0, space: 0, width: 48.39, height: 3.81}
-  pads:
-    signal: {n: 150, pitch: 0.635, y: 2.865, width: 0.41, height: 2.27}
-
-Samtec_BSS-075-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BSS-075-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: 2.67, space: 51.753}
-
-Samtec_BSS-100-xx-x-D_P0.5mm_Vertical: &BSS-100-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BSS_meta
-  layout: {type: 'Socket', width: 68.898, height: 7.24}
-  banks: {n: 1, diff: 0, space: 0, width: 64.265, height: 3.81}
-  pads:
-    signal: {n: 200, pitch: 0.635, y: 2.865, width: 0.41, height: 2.27}
-
-Samtec_BSS-100-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BSS-100-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: 2.67, space: 67.628}
-
-################################################################################
-# BTE family (0.8mm terminal)
-
-Samtec_BTE-020-xx-x-D_P0.5mm_Vertical: &BTE-020-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: &BTE_meta
-    description: *desc
-    tags: 'connector Samtec BTE mezzanine terminal vertical'
-    datasheet: >-
-      http://suddendocs.samtec.com/prints/bte-xxx-xx-x-d-xx-mkt.pdf,
-      http://suddendocs.samtec.com/prints/bte-xxx-xx-x-d-xx-footprint.pdf
-  layout: {type: 'Terminal', width: 20.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 16.88, height: 4.0}
-  pads:
-    signal: {n: 40, pitch: 0.8, y: 3.086, width: 0.457, height: 1.45}
-
-Samtec_BTE-020-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BTE-020-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: -2.03, space: 18.477}
-
-Samtec_BTE-040-xx-x-D_P0.5mm_Vertical: &BTE-040-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BTE_meta
-  layout: {type: 'Terminal', width: 36.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 32.88, height: 4.0}
-  pads:
-    signal: {n: 80, pitch: 0.8, y: 3.086, width: 0.457, height: 1.45}
-
-Samtec_BTE-040-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BTE-040-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: -2.03, space: 34.477}
-
-Samtec_BTE-060-xx-x-D_P0.5mm_Vertical: &BTE-060-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BTE_meta
-  layout: {type: 'Terminal', width: 52.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 48.88, height: 4.0}
-  pads:
-    signal: {n: 120, pitch: 0.8, y: 3.086, width: 0.457, height: 1.45}
-
-Samtec_BTE-060-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BTE-060-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: -2.03, space: 50.477}
-
-Samtec_BTE-080-xx-x-D_P0.5mm_Vertical: &BTE-080-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BTE_meta
-  layout: {type: 'Terminal', width: 68.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 64.88, height: 4.0}
-  pads:
-    signal: {n: 160, pitch: 0.8, y: 3.086, width: 0.457, height: 1.45}
-
-Samtec_BTE-080-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BTE-080-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: -2.03, space: 66.477}
-
-Samtec_BTE-100-xx-x-D_P0.5mm_Vertical: &BTE-100-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BTE_meta
-  layout: {type: 'Terminal', width: 84.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 80.88, height: 4.0}
-  pads:
-    signal: {n: 200, pitch: 0.8, y: 3.086, width: 0.457, height: 1.45}
-
-Samtec_BTE-100-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BTE-100-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: -2.03, space: 82.477}
-
-Samtec_BTE-120-xx-x-D_P0.5mm_Vertical: &BTE-120-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BTE_meta
-  layout: {type: 'Terminal', width: 100.0, height: 5.97}
-  banks: {n: 1, diff: 0, space: 0, width: 96.88, height: 4.0}
-  pads:
-    signal: {n: 240, pitch: 0.8, y: 3.086, width: 0.457, height: 1.45}
-
-Samtec_BTE-120-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BTE-120-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: -2.03, space: 98.477}
-
-################################################################################
-# BSE family (0.8mm socket)
-
-Samtec_BSE-020-xx-x-D_P0.5mm_Vertical: &BSE-020-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: &BSE_meta
-    description: *desc
-    tags: 'connector Samtec BSE mezzanine socket vertical'
-    datasheet: >-
-      http://suddendocs.samtec.com/prints/bse-xxx-01-x-d-xx-mkt.pdf,
-      http://suddendocs.samtec.com/prints/bse-xxx-01-x-d-xx-footprint.pdf
-  layout: {type: 'Socket', width: 21.27, height: 7.239}
-  banks: {n: 1, diff: 0, space: 0, width: 16.636, height: 3.81}
-  pads:
-    signal: {n: 40, pitch: 0.8, y: 2.865, width: 0.41, height: 2.273}
-
-Samtec_BSE-020-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BSE-020-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: 2.67, space: 20.128}
-
-Samtec_BSE-040-xx-x-D_P0.5mm_Vertical: &BSE-040-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BSE_meta
-  layout: {type: 'Socket', width: 37.27, height: 7.239}
-  banks: {n: 1, diff: 0, space: 0, width: 32.636, height: 3.81}
-  pads:
-    signal: {n: 80, pitch: 0.8, y: 2.865, width: 0.41, height: 2.273}
-
-Samtec_BSE-040-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BSE-040-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: 2.67, space: 36.128}
-
-Samtec_BSE-060-xx-x-D_P0.5mm_Vertical: &BSE-060-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BSE_meta
-  layout: {type: 'Socket', width: 53.27, height: 7.239}
-  banks: {n: 1, diff: 0, space: 0, width: 48.636, height: 3.81}
-  pads:
-    signal: {n: 120, pitch: 0.8, y: 2.865, width: 0.41, height: 2.273}
-
-Samtec_BSE-060-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BSE-060-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: 2.67, space: 52.128}
-
-Samtec_BSE-080-xx-x-D_P0.5mm_Vertical: &BSE-080-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BSE_meta
-  layout: {type: 'Socket', width: 69.27, height: 7.239}
-  banks: {n: 1, diff: 0, space: 0, width: 64.636, height: 3.81}
-  pads:
-    signal: {n: 160, pitch: 0.8, y: 2.865, width: 0.41, height: 2.273}
-
-Samtec_BSE-080-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BSE-080-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: 2.67, space: 68.128}
-
-Samtec_BSE-100-xx-x-D_P0.5mm_Vertical: &BSE-100-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BSE_meta
-  layout: {type: 'Socket', width: 85.27, height: 7.239}
-  banks: {n: 1, diff: 0, space: 0, width: 80.636, height: 3.81}
-  pads:
-    signal: {n: 200, pitch: 0.8, y: 2.865, width: 0.41, height: 2.273}
-
-Samtec_BSE-100-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BSE-100-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: 2.67, space: 84.128}
-
-Samtec_BSE-120-xx-x-D_P0.5mm_Vertical: &BSE-120-xx-x-D
-  library: 'Connector_Samtec_BasicBladeAndBeam'
-  meta: *BSE_meta
-  layout: {type: 'Socket', width: 101.27, height: 7.239}
-  banks: {n: 1, diff: 0, space: 0, width: 96.636, height: 3.81}
-  pads:
-    signal: {n: 240, pitch: 0.8, y: 2.865, width: 0.41, height: 2.273}
-
-Samtec_BSE-120-xx-x-D-A_P0.5mm_Vertical:
-  <<: *BSE-120-xx-x-D
-  add-tags: 'alignment-pins'
-  holes:
-    - {drill: 1.0, y: 2.67, space: 100.128}
diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.json b/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
index 748a914ef..6828e21f3 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
@@ -183,7 +183,7 @@
         "layout": {"type": "Terminal", "width": 20.0, "height": 5.97},
         "banks": {"n": 1, "diff": 0, "space": 20.0, "width": 16.88, "height": 3.94},
         "pads": {
-            "signal": {"n": 50, "pitch": 0.635, "width": 0.406, "height": 1.448, "y": 3.086},
+            "signal": {"n": 50, "pitch": 0.635, "width": 0.406, "height": 1.45, "y": 3.086},
             "planes": [
                 {"n": 2, "pitch": 16.89, "width": 2.54, "height": 0.635, "y": 0},
                 {"n": 2, "pitch":  6.35, "width": 4.70, "height": 0.635, "y": 0}

From a7e54751b1a33aca8a00da4a4c2d9a5bab31205a Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Fri, 4 Sep 2020 20:31:35 -0700
Subject: [PATCH 51/62] dict_tools.py: rework dictMerge() so it copies the
 first argument

---
 scripts/tools/dict_tools.py | 61 ++++++++-----------------------------
 1 file changed, 12 insertions(+), 49 deletions(-)

diff --git a/scripts/tools/dict_tools.py b/scripts/tools/dict_tools.py
index d7b7cf61b..ab45ed9d3 100644
--- a/scripts/tools/dict_tools.py
+++ b/scripts/tools/dict_tools.py
@@ -15,13 +15,13 @@ def dictMerge(a, b):
     Parameters
     ----------
     a : dict
-        Base dictionary used as the merge destination
+        Base dictionary
     b : dict
         Dictionary containing values to merge into `a`
     
     Returns
     -------
-    Merged dictionaries (`a` with contents updated from `b`)
+    Merged dictionaries (copy of `a` with contents updated from `b`)
     
     Examples
     --------
@@ -30,12 +30,13 @@ def dictMerge(a, b):
     >>> dictMerge(a, b)
     {'a': 1, 'b': 2, 'c': {'a': 1, 'b': 3}, 'd': 4}
     """
-    for (k, v) in b.items():
-        if isinstance(v, collections.abc.Mapping):
-            a[k] = dictMerge(a.get(k, {}), v)
+    c = copy.deepcopy(a)
+    for k in b:
+        if isinstance(b[k], collections.abc.Mapping):
+            c[k] = dictMerge(c.get(k, {}), b[k])
         else:
-            a[k] = v
-    return a
+            c[k] = copy.copy(b[k])
+    return c
 
 def dictInherit(d):
     """Recursively merges dictionaries within a hierarchy using 'inherit' entries
@@ -63,57 +64,19 @@ def dictInherit(d):
         If two dictionaries attempt to inherit each other
     KeyError
         If a dictionary tries to inherit from a key that is not in `d`
-    
-    Notes
-    -----
-    Typical JSON/YAML file structure that can be processed by this function:
-    {
-      "1": {
-        "a": 1,
-        "b": {"c": 2, "d": 3, ...}
-      },
-      "2": {
-        "inherit": "1",
-        "b": {"c": 3}
-      },
-      ...
-      "n": {
-        "inherit": "2",
-        "d": 4
-      }
-    }
-    
-    The result will look something like this:
-    {
-      "1": {
-        "a": 1,
-        "b": {"c": 2, "d": 3, ...}
-      },
-      "2": {
-        "a": 1,
-        "b": {"c": 3, "d": 3, ...}
-      },
-      ...
-      "n": {
-        "a": 1,
-        "b": {"c": 3, "d": 3, ...},
-        "d": 4
-      }
-    }
     """
     
-    def dictInherit(d, child, parent):
+    def _dictInherit(d, child, parent):
         if 'inherit' not in parent:
             del child['inherit']
-            p = copy.deepcopy(parent)
-            return dictMerge(p, child)
+            return dictMerge(parent, child)
         elif d[parent['inherit']] is child:
             raise RecursionError
         else:
-            return dictInherit(d, parent, d[parent['inherit']])
+            return _dictInherit(d, parent, d[parent['inherit']])
 
     for (k, v) in d.items():
         if isinstance(v, collections.abc.Mapping) and 'inherit' in v:
-            d[k] = dictInherit(d, v, d[v['inherit']])
+            d[k] = _dictInherit(d, v, d[v['inherit']])
         else:
             continue

From fd6bbcd1dbc64f74da72873b537af3999ed2d4a4 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Mon, 7 Sep 2020 21:10:03 -0700
Subject: [PATCH 52/62] Minor corrections in QStrip_Vertical.json

---
 scripts/Connector/Connector_Samtec/QStrip_Vertical.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.json b/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
index 6828e21f3..e32b06bbf 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
@@ -259,7 +259,7 @@
         "layout": {"type": "Socket", "width": 21.27, "height": 7.24},
         "banks": {"n": 1, "diff": 0, "space": 20.0, "width": 16.64, "height": 3.66},
         "pads": {
-            "signal": {"n": 60, "pitch": 0.635, "width": 0.406, "height": 2.273, "y": 2.865},
+            "signal": {"n": 50, "pitch": 0.635, "width": 0.406, "height": 2.273, "y": 2.865},
             "planes": [
                 {"n": 2, "pitch": 16.13, "width": 2.8, "height": 0.432, "y": 0},
                 {"n": 2, "pitch":  6.35, "width": 4.7, "height": 0.432, "y": 0}
@@ -359,13 +359,13 @@
     },
     "Samtec_QTE-060-xx-x-D_P0.8mm_Vertical": {
         "inherit": "Samtec_QTE-020-xx-x-D_P0.8mm_Vertical",
-        "layout": {"width": 60.0},
+        "layout": {"width": 40.0},
         "banks": {"n": 2}
     },
     "Samtec_QTE-060-xx-x-D-A_P0.8mm_Vertical": {
         "inherit": "Samtec_QTE-060-xx-x-D_P0.8mm_Vertical",
         "add-tags": "alignment-pins",
-        "holes": [{"drill": 1.0, "space": 58.48, "y": -2.032}]
+        "holes": [{"drill": 1.0, "space": 38.48, "y": -2.032}]
     },
     "Samtec_QTE-014-xx-x-D-DP_P0.8mm_Vertical": {
         "inherit": "Samtec_QTE-020-xx-x-D_P0.8mm_Vertical",

From 8b08975cd462e658cbb3e2631558c061797c4bad Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Mon, 7 Sep 2020 21:10:03 -0700
Subject: [PATCH 53/62] Add support for "+" prefix in dict_merge.py, edits to
 Samtec scripts

dict_tools.py:
    Add support for "+key" parameters in the b argument that are added
    to the corresponding "key" in a. This makes it possible to extend
    existing objects (such as list or str) or add to numeric objects

QStrip_Vertical.py:
- Outdated block comment
- "add-tags" special case

QStrip_Vertical.json
- "add-tags" paramters
+ "layout": {"+tags"} parameters

RazorBeam_Vertical.py:
+ dictInherit() support
- Special cases made unnecessary by "+key" support it dictMerge()

Create RazorBeam_Vertical.json: LSHM, LSS, and LSEM footprint specs
---
 .../Connector_Samtec/QStrip_Vertical.json     |  82 +++++-----
 .../Connector_Samtec/QStrip_Vertical.py       |  46 ------
 .../Connector_Samtec/RazorBeam_Vertical.json  | 145 ++++++++++++++++++
 .../Connector_Samtec/RazorBeam_Vertical.py    |  20 +--
 scripts/tools/dict_tools.py                   |   5 +-
 5 files changed, 198 insertions(+), 100 deletions(-)
 create mode 100644 scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.json b/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
index 6828e21f3..74e856f53 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
@@ -18,7 +18,7 @@
     },
     "Samtec_QTH-030-xx-x-D-A_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-030-xx-x-D_P0.5mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 18.48, "y": -2.032}]
     },
     "Samtec_QTH-060-xx-x-D_P0.5mm_Vertical": {
@@ -28,7 +28,7 @@
     },
     "Samtec_QTH-060-xx-x-D-A_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-060-xx-x-D_P0.5mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 38.48, "y": -2.032}]
     },
     "Samtec_QTH-090-xx-x-D_P0.5mm_Vertical": {
@@ -38,7 +38,7 @@
     },
     "Samtec_QTH-090-xx-x-D-A_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-090-xx-x-D_P0.5mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 58.48, "y": -2.032}]
     },
     "Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical": {
@@ -51,7 +51,7 @@
     },
     "Samtec_QTH-020-xx-x-D-DP-A_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 18.48, "y": -2.032}]
     },
     "Samtec_QTH-040-xx-x-D-DP_P0.5mm_Vertical": {
@@ -61,7 +61,7 @@
     },
     "Samtec_QTH-040-xx-x-D-DP-A_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-040-xx-x-D-DP_P0.5mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 38.48, "y": -2.032}]
     },
     "Samtec_QTH-060-xx-x-D-DP_P0.5mm_Vertical": {
@@ -71,7 +71,7 @@
     },
     "Samtec_QTH-060-xx-x-D-DP-A_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-060-xx-x-D-DP_P0.5mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 58.48, "y": -2.032}]
     },
     "Samtec_HSMC_ASP-122952-01_P0.5mm_Vertical": {
@@ -81,7 +81,7 @@
             "pn": "ASP-122952-01",
             "description": "Samtec {pn:s} HSMC Card {type:s}; modified QTH-090-01-L-D-A, Bank 1 differential ({ds:s}); generated with kicad-footprint-generator",
             "datasheet": "http://suddendocs.samtec.com/prints/asp-122952-01-mkt.pdf",
-            "tags": "connector Samtec QStrip QPairs HSMC card terminal mezzanine vertical single-ended differential alignment-pins application-specific"
+            "+tags": " QPairs HSMC card differential application-specific"
         },
         "banks": {"diff": 1}
     },
@@ -105,7 +105,7 @@
     },
     "Samtec_QSH-030-xx-x-D-A_P0.5mm_Vertical": {
         "inherit": "Samtec_QSH-030-xx-x-D_P0.5mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 20.13, "y": 2.67}]
     },
     "Samtec_QSH-060-xx-x-D_P0.5mm_Vertical": {
@@ -115,7 +115,7 @@
     },
     "Samtec_QSH-060-xx-x-D-A_P0.5mm_Vertical": {
         "inherit": "Samtec_QSH-060-xx-x-D_P0.5mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 40.13, "y": 2.67}]
     },
     "Samtec_QSH-090-xx-x-D_P0.5mm_Vertical": {
@@ -125,7 +125,7 @@
     },
     "Samtec_QSH-090-xx-x-D-A_P0.5mm_Vertical": {
         "inherit": "Samtec_QSH-090-xx-x-D_P0.5mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 60.13, "y": 2.67}]
     },
     "Samtec_QSH-020-xx-x-D-DP_P0.5mm_Vertical": {
@@ -138,7 +138,7 @@
     },
     "Samtec_QSH-020-xx-x-D-DP-A_P0.5mm_Vertical": {
         "inherit": "Samtec_QSH-020-xx-x-D-DP_P0.5mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 20.13, "y": 2.67}]
     },
     "Samtec_QSH-040-xx-x-D-DP_P0.5mm_Vertical": {
@@ -148,7 +148,7 @@
     },
     "Samtec_QSH-040-xx-x-D-DP-A_P0.5mm_Vertical": {
         "inherit": "Samtec_QSH-040-xx-x-D-DP_P0.5mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 40.13, "y": 2.67}]
     },
     "Samtec_QSH-060-xx-x-D-DP_P0.5mm_Vertical": {
@@ -158,7 +158,7 @@
     },
     "Samtec_QSH-060-xx-x-D-DP-A_P0.5mm_Vertical": {
         "inherit": "Samtec_QSH-060-xx-x-D-DP_P0.5mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 60.13, "y": 2.67}]
     },
     "Samtec_HSMC_ASP-122953-01_P0.5mm_Vertical": {
@@ -168,7 +168,7 @@
             "pn": "ASP-122953-01",
             "description": "Samtec {pn:s} HSMC Host {type:s}; modified QSH-090-01-L-D-A, Bank 1 differential ({ds:s}); generated with kicad-footprint-generator",
             "datasheet": "http://suddendocs.samtec.com/prints/asp-122953-01-mkt.pdf",
-            "tags": "connector Samtec QSeries QStrip QPairs HSMC host socket mezzanine vertical single-ended differential application-specific"
+            "+tags": " QPairs HSMC host differential application-specific"
         },
         "banks": {"diff": 1}
     },
@@ -192,7 +192,7 @@
     },
     "Samtec_QTS-025-xx-x-D-A_P0.635mm_Vertical": {
         "inherit": "Samtec_QTS-025-xx-x-D_P0.635mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 18.48, "y": -2.032}]
     },
     "Samtec_QTS-050-xx-x-D_P0.635mm_Vertical": {
@@ -202,7 +202,7 @@
     },
     "Samtec_QTS-050-xx-x-D-A_P0.635mm_Vertical": {
         "inherit": "Samtec_QTS-050-xx-x-D_P0.635mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 38.48, "y": -2.032}]
     },
     "Samtec_QTS-075-xx-x-D_P0.635mm_Vertical": {
@@ -212,7 +212,7 @@
     },
     "Samtec_QTS-075-xx-x-D-A_P0.635mm_Vertical": {
         "inherit": "Samtec_QTS-075-xx-x-D_P0.635mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 58.48, "y": -2.032}]
     },
     "Samtec_QTS-016-xx-x-D-DP_P0.635mm_Vertical": {
@@ -225,7 +225,7 @@
     },
     "Samtec_QTS-016-xx-x-D-DP-A_P0.635mm_Vertical": {
         "inherit": "Samtec_QTS-016-xx-x-D-DP_P0.635mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 18.48, "y": -2.032}]
     },
     "Samtec_QTS-032-xx-x-D-DP_P0.635mm_Vertical": {
@@ -235,7 +235,7 @@
     },
     "Samtec_QTS-032-xx-x-D-DP-A_P0.635mm_Vertical": {
         "inherit": "Samtec_QTS-032-xx-x-D-DP_P0.635mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 38.48, "y": -2.032}]
     },
     "Samtec_QTS-048-xx-x-D-DP_P0.635mm_Vertical": {
@@ -245,7 +245,7 @@
     },
     "Samtec_QTS-048-xx-x-D-DP-A_P0.635mm_Vertical": {
         "inherit": "Samtec_QTS-048-xx-x-D-DP_P0.635mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 58.48, "y": -2.032}]
     },
 
@@ -259,7 +259,7 @@
         "layout": {"type": "Socket", "width": 21.27, "height": 7.24},
         "banks": {"n": 1, "diff": 0, "space": 20.0, "width": 16.64, "height": 3.66},
         "pads": {
-            "signal": {"n": 60, "pitch": 0.635, "width": 0.406, "height": 2.273, "y": 2.865},
+            "signal": {"n": 50, "pitch": 0.635, "width": 0.406, "height": 2.273, "y": 2.865},
             "planes": [
                 {"n": 2, "pitch": 16.13, "width": 2.8, "height": 0.432, "y": 0},
                 {"n": 2, "pitch":  6.35, "width": 4.7, "height": 0.432, "y": 0}
@@ -268,7 +268,7 @@
     },
     "Samtec_QSS-025-xx-x-D-A_P0.635mm_Vertical": {
         "inherit": "Samtec_QSS-025-xx-x-D_P0.635mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 20.0, "y": 2.67}]
     },
     "Samtec_QSS-050-xx-x-D_P0.635mm_Vertical": {
@@ -278,7 +278,7 @@
     },
     "Samtec_QSS-050-xx-x-D-A_P0.635mm_Vertical": {
         "inherit": "Samtec_QSS-050-xx-x-D_P0.635mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 40.0, "y": 2.67}]
     },
     "Samtec_QSS-075-xx-x-D_P0.635mm_Vertical": {
@@ -288,7 +288,7 @@
     },
     "Samtec_QSS-075-xx-x-D-A_P0.635mm_Vertical": {
         "inherit": "Samtec_QSS-075-xx-x-D_P0.635mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 60.0, "y": 2.67}]
     },
     "Samtec_QSS-016-xx-x-D-DP_P0.635mm_Vertical": {
@@ -301,7 +301,7 @@
     },
     "Samtec_QSS-016-xx-x-D-DP-A_P0.635mm_Vertical": {
         "inherit": "Samtec_QSS-016-xx-x-D-DP_P0.635mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 20.0, "y": 2.67}]
     },
     "Samtec_QSS-032-xx-x-D-DP_P0.635mm_Vertical": {
@@ -311,7 +311,7 @@
     },
     "Samtec_QSS-032-xx-x-D-DP-A_P0.635mm_Vertical": {
         "inherit": "Samtec_QSS-032-xx-x-D-DP_P0.635mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 40.0, "y": 2.67}]
     },
     "Samtec_QSS-048-xx-x-D-DP_P0.635mm_Vertical": {
@@ -321,7 +321,7 @@
     },
     "Samtec_QSS-048-xx-x-D-DP-A_P0.635mm_Vertical": {
         "inherit": "Samtec_QSS-048-xx-x-D-DP_P0.635mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 60.0, "y": 2.67}]
     },
 
@@ -344,7 +344,7 @@
     },
     "Samtec_QTE-020-xx-x-D-A_P0.8mm_Vertical": {
         "inherit": "Samtec_QTE-020-xx-x-D_P0.8mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 18.48, "y": -2.032}]
     },
     "Samtec_QTE-040-xx-x-D_P0.8mm_Vertical": {
@@ -354,18 +354,18 @@
     },
     "Samtec_QTE-040-xx-x-D-A_P0.8mm_Vertical": {
         "inherit": "Samtec_QTE-040-xx-x-D_P0.8mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 38.48, "y": -2.032}]
     },
     "Samtec_QTE-060-xx-x-D_P0.8mm_Vertical": {
         "inherit": "Samtec_QTE-020-xx-x-D_P0.8mm_Vertical",
-        "layout": {"width": 60.0},
+        "layout": {"width": 40.0},
         "banks": {"n": 2}
     },
     "Samtec_QTE-060-xx-x-D-A_P0.8mm_Vertical": {
         "inherit": "Samtec_QTE-060-xx-x-D_P0.8mm_Vertical",
-        "add-tags": "alignment-pins",
-        "holes": [{"drill": 1.0, "space": 58.48, "y": -2.032}]
+        "meta": {"+tags": " alignment-pins"},
+        "holes": [{"drill": 1.0, "space": 38.48, "y": -2.032}]
     },
     "Samtec_QTE-014-xx-x-D-DP_P0.8mm_Vertical": {
         "inherit": "Samtec_QTE-020-xx-x-D_P0.8mm_Vertical",
@@ -377,7 +377,7 @@
     },
     "Samtec_QTE-014-xx-x-D-DP-A_P0.8mm_Vertical": {
         "inherit": "Samtec_QTE-014-xx-x-D-DP_P0.8mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 18.48, "y": -2.032}]
     },
     "Samtec_QTE-028-xx-x-D-DP_P0.8mm_Vertical": {
@@ -387,7 +387,7 @@
     },
     "Samtec_QTE-028-xx-x-D-DP-A_P0.8mm_Vertical": {
         "inherit": "Samtec_QTE-028-xx-x-D-DP_P0.8mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 38.48, "y": -2.032}]
     },
     "Samtec_QTE-042-xx-x-D-DP_P0.8mm_Vertical": {
@@ -397,7 +397,7 @@
     },
     "Samtec_QTE-042-xx-x-D-DP-A_P0.8mm_Vertical": {
         "inherit": "Samtec_QTE-042-xx-x-D-DP_P0.8mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 58.48, "y": -2.032}]
     },
 
@@ -420,7 +420,7 @@
     },
     "Samtec_QSE-020-xx-x-D-A_P0.8mm_Vertical": {
         "inherit": "Samtec_QSE-020-xx-x-D_P0.8mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 20.13, "y": 2.67}]
     },
     "Samtec_QSE-040-xx-x-D_P0.8mm_Vertical": {
@@ -430,7 +430,7 @@
     },
     "Samtec_QSE-040-xx-x-D-A_P0.8mm_Vertical": {
         "inherit": "Samtec_QSE-040-xx-x-D_P0.8mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 40.13, "y": 2.67}]
     },
     "Samtec_QSE-060-xx-x-D_P0.8mm_Vertical": {
@@ -440,7 +440,7 @@
     },
     "Samtec_QSE-060-xx-x-D-A_P0.8mm_Vertical": {
         "inherit": "Samtec_QSE-060-xx-x-D_P0.8mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 60.13, "y": 2.67}]
     },
     "Samtec_QSE-014-xx-x-D-DP_P0.8mm_Vertical": {
@@ -453,7 +453,7 @@
     },
     "Samtec_QSE-014-xx-x-D-DP-A_P0.8mm_Vertical": {
         "inherit": "Samtec_QSE-014-xx-x-D-DP_P0.8mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 20.13, "y": 2.67}]
     },
     "Samtec_QSE-028-xx-x-D-DP_P0.8mm_Vertical": {
@@ -463,7 +463,7 @@
     },
     "Samtec_QSE-028-xx-x-D-DP-A_P0.8mm_Vertical": {
         "inherit": "Samtec_QSE-028-xx-x-D-DP_P0.8mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 40.13, "y": 2.67}]
     },
     "Samtec_QSE-042-xx-x-D-DP_P0.8mm_Vertical": {
@@ -473,7 +473,7 @@
     },
     "Samtec_QSE-042-xx-x-D-DP-A_P0.8mm_Vertical": {
         "inherit": "Samtec_QSE-042-xx-x-D-DP_P0.8mm_Vertical",
-        "add-tags": "alignment-pins",
+        "meta": {"+tags": " alignment-pins"},
         "holes": [{"drill": 1.0, "space": 60.13, "y": 2.67}]
     }
 }
diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
index b2c41b8fb..c3a9e974d 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
@@ -17,50 +17,6 @@
 # Copyright (C) 2019 by Caleb Reister <calebreister@gmail.com>
 #
 
-"""
-YAML footprint specification
----
-Footprint_Name:
-  library: 'library name' # [optional] KiCad library to use, overrides default
-  meta: # Footprint metadata
-    pn: 'part number' # [optional] overrides automatic part number detection
-    description: 'Brief description of the footprint'
-    datasheet: 'URL(s) to footprint datasheet'
-    tags: 'KiCad tags go here'
-  add-tags: 'more tags' # [optional] extends the tag list
-  layout: # General footprint layout/drawing data
-    type: '(Terminal|Socket)' # sets Pin 1 position and drawing mode
-    width: !!float mm # [cosmetic] overall width of the connector
-    height: !!float mm # [cosmetic] overall height of the connector
-  width: !!float mm # [optional, cosmetic] overrides layout::width
-  banks:
-    n: !!uint # number of banks in the connector
-    diff: !!uint # number of differential banks
-    slots: !!uint even # number of pin positions in a bank
-    space: !!float mm # distance between adjacent banks
-    width: !!float mm # width of bank outline drawn on F.Fab
-    height: !!float mm # height of bank outline drawn on F.Fab
-  pads:
-    signal: # signal pin parameters
-      n: !!uint # number of pin positions in a bank
-      pitch: !!float mm
-      y: !!float mm # vertical offset
-      width: !!float mm # Pad width
-      height: !!float mm # Pad height
-    planes: # plane parameters
-      - {n, pitch, y, width, height}
-      - ...
-  holes: # [optional] hole pair specifications, mirrored about y axis
-    - # Hole spec. 1
-      name: "" # [optional] name/number for plated holes
-      drill: !!float mm # drill diameter (a list produces an oval)
-      pad: !!float mm # [optional] PTH pad diameter (a list produces an oval)
-      space: !!float mm # distance between holes mirrored about the y-axis
-      y: !!float mm # vertical offset
-    - # Hole spec. 2...
-...
-"""
-
 import sys
 import os
 import argparse
@@ -350,8 +306,6 @@ def generate_one_footprint(param, config, default_lib):
 
     # Tags
     tags = param['meta']['tags']
-    if 'add-tags' in param:
-        tags += ' ' + param['add-tags']
     fp.setTags(tags)
 
     # 3D model path
diff --git a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json
new file mode 100644
index 000000000..134b76fc9
--- /dev/null
+++ b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json
@@ -0,0 +1,145 @@
+{
+    "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical": {
+        "library": "Connector_Samtec_RazorBeam",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip ({ds:s}); generated with kicad-footprint-generator",
+            "datasheet": "http://suddendocs.samtec.com/catalog_english/lshm_dv.pdf",
+            "tags": "connector Samtec RazorBeam LSHM self-mating terminal socket vertical"
+        },
+        "layout": {"width": 7.20, "height": 4.98},
+        "pads": {"n": 10, "pitch": 0.5, "y": 1.85, "width": 0.3, "height": 1.5},
+        "holes": [{"drill": 1.45, "space": 4.5, "y": -0.85}]
+    },
+    "Samtec_LSHM-105-xx.x-x-DV-A-S_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical",
+        "meta": {"+tags": " shield"},
+        "layout": {"+width": 1.1},
+        "+holes": [{"drill": 1.0, "pad": 1.5, "space": 7.45, "y": 1.15}]
+    },
+    "Samtec_LSHM-110-xx.x-x-DV-A-N_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical",
+        "layout": {"width": 9.70},
+        "pads": {"n": 20},
+        "holes": [{"drill": 1.45, "space": 7.0, "y": -0.85}]
+    },
+    "Samtec_LSHM-110-xx.x-x-DV-A-S_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-110-xx.x-x-DV-A-N_P0.5mm_Vertical",
+        "meta": {"+tags": " shield"},
+        "layout": {"+width": 1.1},
+        "+holes": [{"drill": 1.0, "pad": 1.5, "space": 9.95, "y": 1.15}]
+    },
+    "Samtec_LSHM-120-xx.x-x-DV-A-N_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical",
+        "layout": {"width": 14.70},
+        "pads": {"n": 40},
+        "holes": [{"drill": 1.45, "space": 12.0, "y": -0.85}]
+    },
+    "Samtec_LSHM-120-xx.x-x-DV-A-S_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-120-xx.x-x-DV-A-N_P0.5mm_Vertical",
+        "meta": {"+tags": " shield"},
+        "layout": {"+width": 1.1},
+        "+holes": [{"drill": 1.0, "pad": 1.5, "space": 14.95, "y": 1.15}]
+    },
+    "Samtec_LSHM-130-xx.x-x-DV-A-N_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical",
+        "layout": {"width": 19.70},
+        "pads": {"n": 60},
+        "holes": [{"drill": 1.45, "space": 17.0, "y": -0.85}]
+    },
+    "Samtec_LSHM-130-xx.x-x-DV-A-S_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-130-xx.x-x-DV-A-N_P0.5mm_Vertical",
+        "meta": {"+tags": " shield"},
+        "layout": {"+width": 1.1},
+        "+holes": [{"drill": 1.0, "pad": 1.5, "space": 19.95, "y": 1.15}]
+    },
+    "Samtec_LSHM-140-xx.x-x-DV-A-N_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical",
+        "layout": {"width": 24.70},
+        "pads": {"n": 80},
+        "holes": [{"drill": 1.45, "space": 22.0, "y": -0.85}]
+    },
+    "Samtec_LSHM-140-xx.x-x-DV-A-S_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-140-xx.x-x-DV-A-N_P0.5mm_Vertical",
+        "meta": {"+tags": " shield"},
+        "layout": {"+width": 1.1},
+        "+holes": [{"drill": 1.0, "pad": 1.5, "space": 24.95, "y": 1.15}]
+    },
+    "Samtec_LSHM-150-xx.x-x-DV-A-N_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical",
+        "layout": {"width": 29.70},
+        "pads": {"n": 100},
+        "holes": [{"drill": 1.45, "space": 27.0, "y": -0.85}]
+    },
+    "Samtec_LSHM-150-xx.x-x-DV-A-S_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-150-xx.x-x-DV-A-N_P0.5mm_Vertical",
+        "meta": {"+tags": " shield"},
+        "layout": {"+width": 1.1},
+        "+holes": [{"drill": 1.0, "pad": 1.5, "space": 29.95, "y": 1.15}]
+    },
+
+    "Samtec_LSS-110-xx-x-DV-A_P0.635mm_Vertical": {
+        "library": "Connector_Samtec_RazorBeam",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.3f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip ({ds:s}); generated with kicad-footprint-generator",
+            "datasheet": "http://suddendocs.samtec.com/catalog_english/lss.pdf",
+            "tags": "connector Samtec RazorBeam LSS self-mating terminal socket vertical"
+        },
+        "layout": {"width": 11.10, "height": 4.14},
+        "pads": {"n": 20, "pitch": 0.635, "y": 1.8, "width": 0.4, "height": 1.6},
+        "holes": [{"drill": 0.89, "space": 7.85, "y": -1.1}]
+    },
+    "Samtec_LSS-120-xx-x-DV-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_LSS-110-xx-x-DV-A_P0.635mm_Vertical",
+        "layout": {"width": 17.45},
+        "pads": {"n": 40},
+        "holes": [{"drill": 0.89, "space": 14.20, "y": -1.1}]
+    },
+    "Samtec_LSS-130-xx-x-DV-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_LSS-110-xx-x-DV-A_P0.635mm_Vertical",
+        "layout": {"width": 23.8},
+        "pads": {"n": 60},
+        "holes": [{"drill": 0.89, "space": 20.55, "y": -1.1}]
+    },
+    "Samtec_LSS-140-xx-x-DV-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_LSS-110-xx-x-DV-A_P0.635mm_Vertical",
+        "layout": {"width": 30.15},
+        "pads": {"n": 80},
+        "holes": [{"drill": 0.89, "space": 26.90, "y": -1.1}]
+    },
+    "Samtec_LSS-150-xx-x-DV-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_LSS-110-xx-x-DV-A_P0.635mm_Vertical",
+        "layout": {"width": 36.5},
+        "pads": {"n": 100},
+        "holes": [{"drill": 0.89, "space": 33.25, "y": -1.1}]
+    },
+
+    "Samtec_LSEM-120-xx.x-x-DV-A-N_P0.8mm_Vertical": {
+        "library": "Connector_Samtec_RazorBeam",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip ({ds:s}); generated with kicad-footprint-generator",
+            "datasheet": "http://suddendocs.samtec.com/catalog_english/lsem.pdf",
+            "tags": "connector Samtec RazorBeam LSEM self-mating terminal socket vertical"
+        },
+        "layout": {"width": 20.4, "height": 4.98},
+        "pads": {"n": 40, "pitch": 0.8, "y": 1.85, "width": 0.38, "height": 1.5},
+        "holes": [{"drill": 1.5, "space": 17.7, "y": -0.95}]
+    },
+    "Samtec_LSEM-130-xx.x-x-DV-A-N_P0.8mm_Vertical": {
+        "inherit": "Samtec_LSEM-120-xx.x-x-DV-A-N_P0.8mm_Vertical",
+        "layout": {"width": 28.4},
+        "pads": {"n": 60},
+        "holes": [{"drill": 1.5, "space": 25.7, "y": -1.1}]
+    },
+    "Samtec_LSEM-140-xx.x-x-DV-A-N_P0.8mm_Vertical": {
+        "inherit": "Samtec_LSEM-120-xx.x-x-DV-A-N_P0.8mm_Vertical",
+        "layout": {"width": 36.4},
+        "pads": {"n": 80},
+        "holes": [{"drill": 1.5, "space": 33.7, "y": -1.1}]
+    },
+    "Samtec_LSEM-150-xx.x-x-DV-A-N_P0.8mm_Vertical": {
+        "inherit": "Samtec_LSEM-120-xx.x-x-DV-A-N_P0.8mm_Vertical",
+        "layout": {"width": 44.4},
+        "pads": {"n": 100},
+        "holes": [{"drill": 1.5, "space": 41.7, "y": -1.1}]
+    }
+}
diff --git a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
index 9c25834a6..3a59d4ded 100755
--- a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
@@ -31,6 +31,7 @@
 from KicadModTree import *
 from footprint_text_fields import addTextFields
 from helpers import *
+from dict_tools import *
 
 def generate_one_footprint(param, config, default_lib):
     fp = Footprint(param['name'])
@@ -40,7 +41,7 @@ def generate_one_footprint(param, config, default_lib):
     pad_w = param['pads']['width']
     pad_h = param['pads']['height']
     pad_y = param['pads']['y']
-    pins = param['pins'] # Pin count
+    pins  = param['pads']['n'] # Pin count
 
     # Part number
     partnum = param['meta'].get('pn', param['name'].split('_')[1])
@@ -53,16 +54,12 @@ def generate_one_footprint(param, config, default_lib):
 
     # Tags
     tags = param['meta']['tags']
-    if 'add-tags' in param:
-        tags += ' ' + param['add-tags']
     fp.setTags(tags)
 
     ############################################################################
     # Place pads
     # Pin 1 position
-    pin1 = Vector2D(0,0)
-    pin1.x = -(pins / 4)*pitch + pitch/2
-    pin1.y = -pad_y
+    pin1 = Vector2D(-(pins/4)*pitch + pitch/2, -pad_y)
     
     pin = [] # Pin position list
     for p in range(pins):
@@ -101,10 +98,6 @@ def generate_one_footprint(param, config, default_lib):
     fab_mark = config['fab_pin1_marker_length']
     fab_w = param['layout']['width']
     fab_h = param['layout']['height']
-    if 'add-width' in param:
-        fab_w += param['add-width']
-    if 'add-height' in param:
-        fab_h += param['add-height']
     fab_y = fab_h / 2
     lEdge = -fab_w / 2
     rEdge = lEdge + fab_w
@@ -139,6 +132,7 @@ def generate_one_footprint(param, config, default_lib):
     court_grid = config['courtyard_grid']
     court_offset = config['courtyard_offset']['connector']
 
+    
     court_x = roundToBase(fab_w/2 + court_offset, court_grid)
     court_y = roundToBase(max(fab_y, pad_y + pad_h/2) + court_offset, court_grid)
 
@@ -159,11 +153,11 @@ def generate_one_footprint(param, config, default_lib):
     silk_chamfer = chamfer + silk_offset/2
     silk_pin1 = pin1.x - silk_pad['x']
 
-    if 'shield' in tags:
+    if "shield" in tags:
         silk_lEnd = [[{'x': silk_pin1, 'y': -silk_y},
                       {'x': silk_lEdge + silk_chamfer, 'y': -silk_y},
                       {'x': silk_lEdge, 'y': -silk_y + silk_chamfer},
-                      {'x': silk_lEdge, 'y':  0}],
+                      {'x': silk_lEdge, 'y':  2*silk_offset}],
                      [{'x': silk_lEdge, 'y': silk_y - silk_chamfer},
                       {'x': silk_lEdge + silk_chamfer, 'y': silk_y},
                       {'x': silk_pin1, 'y': silk_y}]]
@@ -275,6 +269,8 @@ def generate_one_footprint(param, config, default_lib):
                     print(path, "empty, skipping...")
                     continue
 
+                dictInherit(footprints)
+
                 for fp_name in footprints:
                     fp_params = footprints.get(fp_name)                    
                     if 'name' in fp_params:
diff --git a/scripts/tools/dict_tools.py b/scripts/tools/dict_tools.py
index ab45ed9d3..9371eae95 100644
--- a/scripts/tools/dict_tools.py
+++ b/scripts/tools/dict_tools.py
@@ -10,7 +10,8 @@ def dictMerge(a, b):
     of clobbering the contents of one dictionary with another, it recursively
     combines dictionaries. The result is a dictionary containing the combined
     contents of the arguments. If both dictionaries contain a key with the same
-    name (at the same level), the value in `b` takes precedence.
+    name (at the same level), the value in `b` takes precedence. Keys prefixed
+    with a "+" are added to the corresponding key in the base dictionary.
     
     Parameters
     ----------
@@ -34,6 +35,8 @@ def dictMerge(a, b):
     for k in b:
         if isinstance(b[k], collections.abc.Mapping):
             c[k] = dictMerge(c.get(k, {}), b[k])
+        elif k.startswith("+"):
+            c[k[1:]] += b[k]
         else:
             c[k] = copy.copy(b[k])
     return c

From 26325c365dc1ce603c47a4fa54205510c7075fd9 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sat, 19 Sep 2020 14:49:34 -0700
Subject: [PATCH 54/62] Add better silkscreen drawing around shield pins in
 RazorBeam_Vertical.py

---
 .../Connector_Samtec/RazorBeam_Vertical.json  | 12 ++---
 .../Connector_Samtec/RazorBeam_Vertical.py    | 45 +++++++++++--------
 2 files changed, 32 insertions(+), 25 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json
index 134b76fc9..56178a0c2 100644
--- a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json
+++ b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json
@@ -14,7 +14,7 @@
         "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical",
         "meta": {"+tags": " shield"},
         "layout": {"+width": 1.1},
-        "+holes": [{"drill": 1.0, "pad": 1.5, "space": 7.45, "y": 1.15}]
+        "+holes": [{"drill": 1.0, "pad": 1.5, "space": 7.45, "y": 1.15, "name": "SH"}]
     },
     "Samtec_LSHM-110-xx.x-x-DV-A-N_P0.5mm_Vertical": {
         "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical",
@@ -26,7 +26,7 @@
         "inherit": "Samtec_LSHM-110-xx.x-x-DV-A-N_P0.5mm_Vertical",
         "meta": {"+tags": " shield"},
         "layout": {"+width": 1.1},
-        "+holes": [{"drill": 1.0, "pad": 1.5, "space": 9.95, "y": 1.15}]
+        "+holes": [{"drill": 1.0, "pad": 1.5, "space": 9.95, "y": 1.15, "name": "SH"}]
     },
     "Samtec_LSHM-120-xx.x-x-DV-A-N_P0.5mm_Vertical": {
         "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical",
@@ -38,7 +38,7 @@
         "inherit": "Samtec_LSHM-120-xx.x-x-DV-A-N_P0.5mm_Vertical",
         "meta": {"+tags": " shield"},
         "layout": {"+width": 1.1},
-        "+holes": [{"drill": 1.0, "pad": 1.5, "space": 14.95, "y": 1.15}]
+        "+holes": [{"drill": 1.0, "pad": 1.5, "space": 14.95, "y": 1.15, "name": "SH"}]
     },
     "Samtec_LSHM-130-xx.x-x-DV-A-N_P0.5mm_Vertical": {
         "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical",
@@ -50,7 +50,7 @@
         "inherit": "Samtec_LSHM-130-xx.x-x-DV-A-N_P0.5mm_Vertical",
         "meta": {"+tags": " shield"},
         "layout": {"+width": 1.1},
-        "+holes": [{"drill": 1.0, "pad": 1.5, "space": 19.95, "y": 1.15}]
+        "+holes": [{"drill": 1.0, "pad": 1.5, "space": 19.95, "y": 1.15, "name": "SH"}]
     },
     "Samtec_LSHM-140-xx.x-x-DV-A-N_P0.5mm_Vertical": {
         "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical",
@@ -62,7 +62,7 @@
         "inherit": "Samtec_LSHM-140-xx.x-x-DV-A-N_P0.5mm_Vertical",
         "meta": {"+tags": " shield"},
         "layout": {"+width": 1.1},
-        "+holes": [{"drill": 1.0, "pad": 1.5, "space": 24.95, "y": 1.15}]
+        "+holes": [{"drill": 1.0, "pad": 1.5, "space": 24.95, "y": 1.15, "name": "SH"}]
     },
     "Samtec_LSHM-150-xx.x-x-DV-A-N_P0.5mm_Vertical": {
         "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical",
@@ -74,7 +74,7 @@
         "inherit": "Samtec_LSHM-150-xx.x-x-DV-A-N_P0.5mm_Vertical",
         "meta": {"+tags": " shield"},
         "layout": {"+width": 1.1},
-        "+holes": [{"drill": 1.0, "pad": 1.5, "space": 29.95, "y": 1.15}]
+        "+holes": [{"drill": 1.0, "pad": 1.5, "space": 29.95, "y": 1.15, "name": "SH"}]
     },
 
     "Samtec_LSS-110-xx-x-DV-A_P0.635mm_Vertical": {
diff --git a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
index 3a59d4ded..c6c9bbe8f 100755
--- a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
@@ -77,21 +77,6 @@ def generate_one_footprint(param, config, default_lib):
                   shape = Pad.SHAPE_RECT)
         fp.append(pad)
 
-    ############################################################################
-    # Holes
-    hole_list = param['holes'] + param.get('add-holes', [])
-    for p in hole_list:
-        drill = p['drill']
-        shape = Pad.SHAPE_CIRCLE if type(drill) is float else Pad.SHAPE_OVAL
-        h = [Pad(number = "SH" if 'pad' in p else "",
-                 at     = (m*p['space']/2, p['y']),
-                 drill  = drill,
-                 size   = p['pad']       if 'pad' in p else drill,
-                 type   = Pad.TYPE_THT   if 'pad' in p else Pad.TYPE_NPTH,
-                 layers = Pad.LAYERS_THT if 'pad' in p else Pad.LAYERS_NPTH,
-                 shape  = shape) for m in (-1,1)]
-        fp.extend(h)
-
     ############################################################################
     # Fabrication layer: F.Fab
     fab_line = config['fab_line_width']
@@ -126,15 +111,35 @@ def generate_one_footprint(param, config, default_lib):
                           close = False,
                           line_width = fab_line))
 
+    ############################################################################
+    # Holes
+    hole_list = param['holes']
+    for p in hole_list:
+        drill = p['drill']
+        shape = Pad.SHAPE_CIRCLE if type(drill) is float else Pad.SHAPE_OVAL
+        h = [Pad(number = p.get('name', ""),
+                 at     = (m*p['space']/2, p['y']),
+                 drill  = drill,
+                 size   = p.get('pad', drill),
+                 type   = Pad.TYPE_THT   if 'pad' in p else Pad.TYPE_NPTH,
+                 layers = Pad.LAYERS_THT if 'pad' in p else Pad.LAYERS_NPTH,
+                 shape  = shape) for m in (-1,1)]
+        fp.extend(h)
+        # Extend courtyard width for shield holes
+        if p['space'] + p.get('pad', drill) > fab_w:
+            fab_w = p['space'] + p.get('pad', drill)
+            sh_x = p['space']/2
+            sh_y = p['y']
+            sh_r = p.get('pad', drill) / 2
+    
     ############################################################################
     # Courtyard: F.CrtYd
     court_line = config['courtyard_line_width']
     court_grid = config['courtyard_grid']
     court_offset = config['courtyard_offset']['connector']
-
     
     court_x = roundToBase(fab_w/2 + court_offset, court_grid)
-    court_y = roundToBase(max(fab_y, pad_y + pad_h/2) + court_offset, court_grid)
+    court_y = roundToBase(max(fab_y, pad_y+pad_h/2) + court_offset, court_grid)
 
     fp.append(RectLine(start  = (-court_x, -court_y),
                        end    = ( court_x,  court_y),
@@ -154,11 +159,13 @@ def generate_one_footprint(param, config, default_lib):
     silk_pin1 = pin1.x - silk_pad['x']
 
     if "shield" in tags:
+        silk_sh = math.sqrt((sh_r+silk_offset)**2 - (silk_rEdge-sh_x)**2)
         silk_lEnd = [[{'x': silk_pin1, 'y': -silk_y},
                       {'x': silk_lEdge + silk_chamfer, 'y': -silk_y},
                       {'x': silk_lEdge, 'y': -silk_y + silk_chamfer},
-                      {'x': silk_lEdge, 'y':  2*silk_offset}],
-                     [{'x': silk_lEdge, 'y': silk_y - silk_chamfer},
+                      {'x': silk_lEdge, 'y': sh_y - silk_sh}],
+                     [{'x': silk_lEdge, 'y': sh_y + silk_sh},
+                      {'x': silk_lEdge, 'y': silk_y - silk_chamfer},
                       {'x': silk_lEdge + silk_chamfer, 'y': silk_y},
                       {'x': silk_pin1, 'y': silk_y}]]
     else:

From 430ffb9f191ff0e8e8f4ca28798eb4a86c59db0a Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sun, 20 Sep 2020 09:07:44 -0700
Subject: [PATCH 55/62] Add y-offset for LSS connector fab/silkscreen

---
 .../Connector_Samtec/RazorBeam_Vertical.json  | 22 +++++---
 .../Connector_Samtec/RazorBeam_Vertical.py    | 50 +++++++++++++------
 2 files changed, 48 insertions(+), 24 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json
index 56178a0c2..ca9b85c05 100644
--- a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json
+++ b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json
@@ -77,40 +77,46 @@
         "+holes": [{"drill": 1.0, "pad": 1.5, "space": 29.95, "y": 1.15, "name": "SH"}]
     },
 
-    "Samtec_LSS-110-xx-x-DV-A_P0.635mm_Vertical": {
+    "Samtec_LSS-105-xx-x-DV-A_P0.635mm_Vertical": {
         "library": "Connector_Samtec_RazorBeam",
         "meta": {
             "description": "Samtec {pn:s} {pitch:1.3f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip ({ds:s}); generated with kicad-footprint-generator",
             "datasheet": "http://suddendocs.samtec.com/catalog_english/lss.pdf",
             "tags": "connector Samtec RazorBeam LSS self-mating terminal socket vertical"
         },
-        "layout": {"width": 11.10, "height": 4.14},
-        "pads": {"n": 20, "pitch": 0.635, "y": 1.8, "width": 0.4, "height": 1.6},
-        "holes": [{"drill": 0.89, "space": 7.85, "y": -1.1}]
+        "layout": {"width": 7.925, "height": 4.14, "y": 0.07},
+        "pads": {"n": 10, "pitch": 0.635, "y": 1.8, "width": 0.4, "height": 1.6},
+        "holes": [{"drill": 0.89, "space": 4.675, "y": 1.1}]
+    },
+    "Samtec_LSS-110-xx-x-DV-A_P0.635mm_Vertical": {
+        "inherit": "Samtec_LSS-105-xx-x-DV-A_P0.635mm_Vertical",
+        "layout": {"width": 11.10},
+        "pads": {"n": 20},
+        "holes": [{"drill": 0.89, "space": 7.85, "y": 1.1}]
     },
     "Samtec_LSS-120-xx-x-DV-A_P0.635mm_Vertical": {
         "inherit": "Samtec_LSS-110-xx-x-DV-A_P0.635mm_Vertical",
         "layout": {"width": 17.45},
         "pads": {"n": 40},
-        "holes": [{"drill": 0.89, "space": 14.20, "y": -1.1}]
+        "holes": [{"drill": 0.89, "space": 14.20, "y": 1.1}]
     },
     "Samtec_LSS-130-xx-x-DV-A_P0.635mm_Vertical": {
         "inherit": "Samtec_LSS-110-xx-x-DV-A_P0.635mm_Vertical",
         "layout": {"width": 23.8},
         "pads": {"n": 60},
-        "holes": [{"drill": 0.89, "space": 20.55, "y": -1.1}]
+        "holes": [{"drill": 0.89, "space": 20.55, "y": 1.1}]
     },
     "Samtec_LSS-140-xx-x-DV-A_P0.635mm_Vertical": {
         "inherit": "Samtec_LSS-110-xx-x-DV-A_P0.635mm_Vertical",
         "layout": {"width": 30.15},
         "pads": {"n": 80},
-        "holes": [{"drill": 0.89, "space": 26.90, "y": -1.1}]
+        "holes": [{"drill": 0.89, "space": 26.90, "y": 1.1}]
     },
     "Samtec_LSS-150-xx-x-DV-A_P0.635mm_Vertical": {
         "inherit": "Samtec_LSS-110-xx-x-DV-A_P0.635mm_Vertical",
         "layout": {"width": 36.5},
         "pads": {"n": 100},
-        "holes": [{"drill": 0.89, "space": 33.25, "y": -1.1}]
+        "holes": [{"drill": 0.89, "space": 33.25, "y": 1.1}]
     },
 
     "Samtec_LSEM-120-xx.x-x-DV-A-N_P0.8mm_Vertical": {
diff --git a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
index c6c9bbe8f..d0ec95a85 100755
--- a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
@@ -83,28 +83,39 @@ def generate_one_footprint(param, config, default_lib):
     fab_mark = config['fab_pin1_marker_length']
     fab_w = param['layout']['width']
     fab_h = param['layout']['height']
-    fab_y = fab_h / 2
+    fab_y = param['layout'].get('y', 0)
     lEdge = -fab_w / 2
     rEdge = lEdge + fab_w
-    chamfer = fab_h / 10 # cosmetic only
 
     # Draw outline
-    outline = [(lEdge + chamfer, -fab_y),
-               (lEdge, -fab_y + chamfer),
-               (lEdge,  fab_y - chamfer),
-               (lEdge + chamfer, fab_y),
-               (rEdge - chamfer, fab_y),
-               (rEdge,  fab_y - chamfer),
-               (rEdge, -fab_y + chamfer),
-               (rEdge - chamfer, -fab_y),
-               (lEdge + chamfer, -fab_y)]
+    if "LSS" in tags:
+        chamfer = fab_h / 3.5 # cosmetic only
+        outline = [(lEdge + chamfer, -fab_h/2 + fab_y),
+                   (lEdge, -fab_h/2 + chamfer + fab_y),
+                   (lEdge, fab_h/2 + fab_y),
+                   (rEdge, fab_h/2 + fab_y),
+                   (rEdge, -fab_h/2 + chamfer + fab_y),
+                   (rEdge - chamfer, -fab_h/2 + fab_y),
+                   (lEdge + chamfer, -fab_h/2 + fab_y)]
+    else:
+        chamfer = fab_h / 10
+        outline = [(lEdge + chamfer, -fab_h/2 + fab_y),
+                   (lEdge, -fab_h/2 + chamfer + fab_y),
+                   (lEdge,  fab_h/2 - chamfer + fab_y),
+                   (lEdge + chamfer, fab_h/2 + fab_y),
+                   (rEdge - chamfer, fab_h/2 + fab_y),
+                   (rEdge,  fab_h/2 - chamfer + fab_y),
+                   (rEdge, -fab_h/2 + chamfer + fab_y),
+                   (rEdge - chamfer, -fab_h/2 + fab_y),
+                   (lEdge + chamfer, -fab_h/2 + fab_y)]
+    
     fp.append(PolygoneLine(nodes = outline,
                            layer = "F.Fab",
                            width = fab_line))
 
     # Pin 1 marker
     fp.append(markerArrow(x = pin1.x,
-                          y = (fab_mark-fab_h) / 2,
+                          y = (fab_mark-fab_h) / 2  + fab_y,
                           width = fab_mark,
                           angle = 180,
                           layer = "F.Fab",
@@ -139,7 +150,7 @@ def generate_one_footprint(param, config, default_lib):
     court_offset = config['courtyard_offset']['connector']
     
     court_x = roundToBase(fab_w/2 + court_offset, court_grid)
-    court_y = roundToBase(max(fab_y, pad_y+pad_h/2) + court_offset, court_grid)
+    court_y = roundToBase(max(fab_h/2+fab_y, pad_y+pad_h/2) + court_offset, court_grid)
 
     fp.append(RectLine(start  = (-court_x, -court_y),
                        end    = ( court_x,  court_y),
@@ -149,9 +160,10 @@ def generate_one_footprint(param, config, default_lib):
     ############################################################################
     # Silkscreen: F.SilkS
     silk_offset = config['silk_fab_offset']
-    silk_y = fab_y + silk_offset
+    silk_y = fab_h/2 + silk_offset
     silk_pad = {'x': config['silk_pad_clearance'] + pad_w/2,
-                'y': config['silk_pad_clearance'] + pad_y/2}
+                'y': config['silk_pad_clearance'] + pad_y/2,
+                'hole': config['silk_pad_clearance']}
     silk_line = config['silk_line_width']
     silk_lEdge = lEdge - silk_offset
     silk_rEdge = rEdge + silk_offset
@@ -159,7 +171,7 @@ def generate_one_footprint(param, config, default_lib):
     silk_pin1 = pin1.x - silk_pad['x']
 
     if "shield" in tags:
-        silk_sh = math.sqrt((sh_r+silk_offset)**2 - (silk_rEdge-sh_x)**2)
+        silk_sh = math.sqrt((sh_r+silk_pad['hole'])**2 - (silk_rEdge-sh_x)**2)
         silk_lEnd = [[{'x': silk_pin1, 'y': -silk_y},
                       {'x': silk_lEdge + silk_chamfer, 'y': -silk_y},
                       {'x': silk_lEdge, 'y': -silk_y + silk_chamfer},
@@ -168,6 +180,12 @@ def generate_one_footprint(param, config, default_lib):
                       {'x': silk_lEdge, 'y': silk_y - silk_chamfer},
                       {'x': silk_lEdge + silk_chamfer, 'y': silk_y},
                       {'x': silk_pin1, 'y': silk_y}]]
+    elif "LSS" in tags:
+        silk_lEnd = [[{'x': silk_pin1,  'y': -silk_y + fab_y},
+                      {'x': silk_lEdge + silk_chamfer, 'y': -silk_y + fab_y},
+                      {'x': silk_lEdge, 'y': -silk_y + fab_y + silk_chamfer},
+                      {'x': silk_lEdge, 'y':  silk_y + fab_y},
+                      {'x': silk_pin1,  'y':  silk_y + fab_y}]]
     else:
         silk_lEnd = [[{'x': silk_pin1, 'y': -silk_y},
                       {'x': silk_lEdge + silk_chamfer, 'y': -silk_y},

From 19bf68483ee3b62f761ff63871987c8d717eba66 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sun, 20 Sep 2020 09:40:07 -0700
Subject: [PATCH 56/62] Correct descriptions in QStrip_Vertical and
 RazorBeam_Vertical

Descriptions are now fully comma-delimited and datasheet links were
moved to the end so that they appear correctly in the footprint browser

Signed-off-by: Caleb Reister <calebreister@gmail.com>
---
 .../Connector_Samtec/QStrip_Vertical.json     | 28 +++++++++----------
 .../Connector_Samtec/QStrip_Vertical.py       |  4 +--
 .../Connector_Samtec/RazorBeam_Vertical.json  |  6 ++--
 .../Connector_Samtec/RazorBeam_Vertical.py    |  6 ++--
 4 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.json b/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
index 74e856f53..b5309de1c 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
@@ -2,7 +2,7 @@
     "Samtec_QTH-030-xx-x-D_P0.5mm_Vertical": {
         "library": "Connector_Samtec_QStrip",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip; {banks:d} bank(s), {pins:d} pins/bank ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip, {banks:d} bank(s), {pins:d} pins/bank",
             "datasheet": "http://suddendocs.samtec.com/catalog_english/qth.pdf",
             "tags": "connector Samtec QStrip QTH mezzanine terminal vertical single-ended"
         },
@@ -44,7 +44,7 @@
     "Samtec_QTH-020-xx-x-D-DP_P0.5mm_Vertical": {
         "inherit": "Samtec_QTH-030-xx-x-D_P0.5mm_Vertical",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Pairs High-Speed Ground Plane {type:s} Strip, Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Pairs High-Speed Ground Plane {type:s} Strip, Differential Pair, {banks:d} bank(s), {pins:d} pairs/bank",
             "tags": "connector Samtec QPairs QTH mezzanine terminal vertical differential"
         },
         "banks": {"diff": 1}
@@ -79,7 +79,7 @@
         "library": "Connector_Samtec",
         "meta": {
             "pn": "ASP-122952-01",
-            "description": "Samtec {pn:s} HSMC Card {type:s}; modified QTH-090-01-L-D-A, Bank 1 differential ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} HSMC Card {type:s}, modified QTH-090-01-L-D-A, Bank 1 differential",
             "datasheet": "http://suddendocs.samtec.com/prints/asp-122952-01-mkt.pdf",
             "+tags": " QPairs HSMC card differential application-specific"
         },
@@ -89,7 +89,7 @@
     "Samtec_QSH-030-xx-x-D_P0.5mm_Vertical": {
         "library": "Connector_Samtec_QStrip",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip; {banks:d} bank(s), {pins:d} pins/bank ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip, {banks:d} bank(s), {pins:d} pins/bank",
             "datasheet": "http://suddendocs.samtec.com/catalog_english/qsh.pdf",
             "tags": "connector Samtec QStrip QSH mezzanine socket vertical single-ended"
         },
@@ -131,7 +131,7 @@
     "Samtec_QSH-020-xx-x-D-DP_P0.5mm_Vertical": {
         "inherit": "Samtec_QSH-030-xx-x-D_P0.5mm_Vertical",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Pairs High-Speed Ground Plane {type:s} Strip, Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Pairs High-Speed Ground Plane {type:s} Strip, Differential Pair, {banks:d} bank(s), {pins:d} pairs/bank",
             "tags": "connector Samtec QPairs QSH mezzanine socket vertical differential"
         },
         "banks": {"diff": 1}
@@ -166,7 +166,7 @@
         "library": "Connector_Samtec",
         "meta": {
             "pn": "ASP-122953-01",
-            "description": "Samtec {pn:s} HSMC Host {type:s}; modified QSH-090-01-L-D-A, Bank 1 differential ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} HSMC Host {type:s}, modified QSH-090-01-L-D-A, Bank 1 differential",
             "datasheet": "http://suddendocs.samtec.com/prints/asp-122953-01-mkt.pdf",
             "+tags": " QPairs HSMC host differential application-specific"
         },
@@ -176,7 +176,7 @@
     "Samtec_QTS-025-xx-x-D_P0.635mm_Vertical": {
         "library": "Connector_Samtec_QStrip",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.3f}mm Q Strip High-Speed Ground Plane {type:s} Strip; {banks:d} bank(s), {pins:d} pins/bank ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.3f}mm Q Strip High-Speed Ground Plane {type:s} Strip, {banks:d} bank(s), {pins:d} pins/bank",
             "datasheet": "http://suddendocs.samtec.com/catalog_english/qts.pdf",
             "tags": "connector Samtec QStrip QTS mezzanine terminal vertical"
         },
@@ -218,7 +218,7 @@
     "Samtec_QTS-016-xx-x-D-DP_P0.635mm_Vertical": {
         "inherit": "Samtec_QTS-025-xx-x-D_P0.635mm_Vertical",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.3f}mm Q Pairs High-Speed Ground Plane {type:s} Strip, Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.3f}mm Q Pairs High-Speed Ground Plane {type:s} Strip, Differential Pair, {banks:d} bank(s), {pins:d} pairs/bank",
             "tags": "connector Samtec QPairs QTS mezzanine terminal vertical differential"
         },
         "banks": {"diff": 1}
@@ -252,7 +252,7 @@
     "Samtec_QSS-025-xx-x-D_P0.635mm_Vertical": {
         "library": "Connector_Samtec_QStrip",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.3f}mm Q Strip High-Speed Ground Plane {type:s} Strip; {banks:d} bank(s), {pins:d} pins/bank ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.3f}mm Q Strip High-Speed Ground Plane {type:s} Strip, {banks:d} bank(s), {pins:d} pins/bank",
             "datasheet": "http://suddendocs.samtec.com/catalog_english/qss.pdf",
             "tags": "connector Samtec QStrip QSS mezzanine socket vertical single-ended"
         },
@@ -294,7 +294,7 @@
     "Samtec_QSS-016-xx-x-D-DP_P0.635mm_Vertical": {
         "inherit": "Samtec_QSS-025-xx-x-D_P0.635mm_Vertical",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.3f}mm Q Pairs High-Speed Ground Plane {type:s} Strip, Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.3f}mm Q Pairs High-Speed Ground Plane {type:s} Strip, Differential Pair, {banks:d} bank(s), {pins:d} pairs/bank",
             "tags": "connector Samtec QPairs QSS mezzanine socket vertical differential"
         },
         "banks": {"diff": 1}
@@ -328,7 +328,7 @@
     "Samtec_QTE-020-xx-x-D_P0.8mm_Vertical": {
         "library": "Connector_Samtec_QStrip",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip; {banks:d} bank(s), {pins:d} pins/bank ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip, {banks:d} bank(s), {pins:d} pins/bank",
             "datasheet": "http://suddendocs.samtec.com/catalog_english/qte.pdf",
             "tags": "connector Samtec QStrip QTE mezzanine terminal vertical"
         },
@@ -370,7 +370,7 @@
     "Samtec_QTE-014-xx-x-D-DP_P0.8mm_Vertical": {
         "inherit": "Samtec_QTE-020-xx-x-D_P0.8mm_Vertical",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Pairs High-Speed Ground Plane {type:s} Strip, Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Pairs High-Speed Ground Plane {type:s} Strip, Differential Pair, {banks:d} bank(s), {pins:d} pairs/bank",
             "tags": "connector Samtec QPairs QTE mezzanine terminal vertical differential"
         },
         "banks": {"diff": 1}
@@ -404,7 +404,7 @@
     "Samtec_QSE-020-xx-x-D_P0.8mm_Vertical": {
         "library": "Connector_Samtec_QStrip",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip; {banks:d} bank(s), {pins:d} pins/bank ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip, {banks:d} bank(s), {pins:d} pins/bank",
             "datasheet": "http://suddendocs.samtec.com/catalog_english/qse.pdf",
             "tags": "connector Samtec QStrip QSE mezzanine socket vertical single-ended"
         },
@@ -446,7 +446,7 @@
     "Samtec_QSE-014-xx-x-D-DP_P0.8mm_Vertical": {
         "inherit": "Samtec_QSE-020-xx-x-D_P0.8mm_Vertical",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Pairs High-Speed Ground Plane {type:s} Strip, Differential Pair; {banks:d} bank(s), {pins:d} pairs/bank ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Q Pairs High-Speed Ground Plane {type:s} Strip, Differential Pair, {banks:d} bank(s), {pins:d} pairs/bank",
             "tags": "connector Samtec QPairs QSE mezzanine socket vertical differential"
         },
         "banks": {"diff": 1}
diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
index c3a9e974d..1c076d43d 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
@@ -298,11 +298,11 @@ def generate_one_footprint(param, config, default_lib):
     desc = param['meta']['description']
     desc = desc.format(pn = partnum,
                        type = mode,
-                       ds = param['meta']['datasheet'],
                        pitch = pitch,
                        banks = banks,
                        pins = pins_or_pairs)
-    fp.setDescription(desc)
+    fp.setDescription(desc + ", generated with kicad-footprint-generator"
+                      + ", " + param['meta']['datasheet'])
 
     # Tags
     tags = param['meta']['tags']
diff --git a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json
index ca9b85c05..67d2936c3 100644
--- a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json
+++ b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json
@@ -2,7 +2,7 @@
     "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical": {
         "library": "Connector_Samtec_RazorBeam",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.2f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip",
             "datasheet": "http://suddendocs.samtec.com/catalog_english/lshm_dv.pdf",
             "tags": "connector Samtec RazorBeam LSHM self-mating terminal socket vertical"
         },
@@ -80,7 +80,7 @@
     "Samtec_LSS-105-xx-x-DV-A_P0.635mm_Vertical": {
         "library": "Connector_Samtec_RazorBeam",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.3f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.3f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip, ",
             "datasheet": "http://suddendocs.samtec.com/catalog_english/lss.pdf",
             "tags": "connector Samtec RazorBeam LSS self-mating terminal socket vertical"
         },
@@ -122,7 +122,7 @@
     "Samtec_LSEM-120-xx.x-x-DV-A-N_P0.8mm_Vertical": {
         "library": "Connector_Samtec_RazorBeam",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.2f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip",
             "datasheet": "http://suddendocs.samtec.com/catalog_english/lsem.pdf",
             "tags": "connector Samtec RazorBeam LSEM self-mating terminal socket vertical"
         },
diff --git a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
index d0ec95a85..ba586b0c1 100755
--- a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
@@ -48,9 +48,9 @@ def generate_one_footprint(param, config, default_lib):
     
     # Description
     desc = param['meta']['description']
-    desc = desc.format(pn = partnum, pitch = pitch,
-                       ds = param['meta']['datasheet'])
-    fp.setDescription(desc)
+    desc = desc.format(pn = partnum, pitch = pitch)
+    fp.setDescription(desc + ", generated with kicad-footprint-generator"
+                      + ", " + param['meta']['datasheet'])
 
     # Tags
     tags = param['meta']['tags']

From 19a4add26aa612eaf6efbd45a02ac1cd6fa80135 Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sun, 20 Sep 2020 19:37:46 -0700
Subject: [PATCH 57/62] Create Samtec mPOWER_Vertical connector script

---
 .../Connector_Samtec/QStrip_Vertical.py       |  14 +-
 .../Connector_Samtec/RazorBeam_Vertical.py    |  12 +-
 .../Connector_Samtec/mPOWER_Vertical.json     | 133 +++++++++
 .../Connector_Samtec/mPOWER_Vertical.py       | 252 ++++++++++++++++++
 4 files changed, 390 insertions(+), 21 deletions(-)
 create mode 100644 scripts/Connector/Connector_Samtec/mPOWER_Vertical.json
 create mode 100755 scripts/Connector/Connector_Samtec/mPOWER_Vertical.py

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
index 1c076d43d..38e064aff 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
@@ -14,7 +14,7 @@
 # License along with kicad-footprint-generator. If not, see
 # <http://www.gnu.org/licenses/>.
 # 
-# Copyright (C) 2019 by Caleb Reister <calebreister@gmail.com>
+# Copyright (C) 2020 by Caleb Reister <calebreister@gmail.com>
 #
 
 import sys
@@ -80,6 +80,7 @@ def generate_one_footprint(param, config, default_lib):
             pos = {'x': x_inv * (pin1.x + (slot // 2)*pitch + b*bank_x),
                    'y': pin1.y - (slot  % 2)*(2*pin1.y),
                    'n': n+1, 'slot': slot}
+            pin[b].append(pos) # Add position to list
 
             # Skip slots for differential banks
             if b < param['banks']['diff']:
@@ -91,7 +92,6 @@ def generate_one_footprint(param, config, default_lib):
                     continue
 
             # Create pad
-            pin[b].append(pos) # Add position to list
             # Create pad (both single-ended and differential)
             pad = Pad(number = str(n),
                       at = pos,
@@ -332,7 +332,7 @@ def generate_one_footprint(param, config, default_lib):
                         default='../conn_config_KLCv3.yaml',
                         help='Series KLC configuration YAML file')
     parser.add_argument('--library', type=str, nargs='?',
-                        default='Connector_Samtec_QSeries',
+                        default='Connector_Samtec_QStrip',
                         help='Default KiCad library name (without extension)')
     parser.add_argument('files', metavar='file', type=str, nargs='*',
                         help='YAML file(s) containing footprint parameters')
@@ -343,7 +343,6 @@ def generate_one_footprint(param, config, default_lib):
             config = yaml.safe_load(config_stream)
         except yaml.YAMLError as exc:
             print(exc)
-
     with open(args.series_config, 'r') as config_stream:
         try:
             config.update(yaml.safe_load(config_stream))
@@ -355,30 +354,23 @@ def generate_one_footprint(param, config, default_lib):
         sys.exit(1)
 
     print("Default Library:", args.library)
-    
     for path in args.files:
         print("Reading", path)
         with open(path, 'r') as stream:
             try:
                 footprints = yaml.safe_load(stream)
-                
                 if footprints is None:
                     print(path, "empty, skipping...")
                     continue
-
                 dictInherit(footprints)
-                
                 for fp_name in footprints:
                     fp_params = footprints.get(fp_name)                    
                     if 'name' in fp_params:
                         print("WARNING: setting 'name' to", fp_name)
-                        
                     fp_params['name'] = fp_name
-
                     print("  - ",
                           fp_params.get('library', args.library), ".pretty/",
                           fp_name, ".kicad_mod", sep="")
-                    
                     generate_one_footprint(fp_params, config, args.library)
             except yaml.YAMLError as exc:
                 print(exc)
diff --git a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
index ba586b0c1..9e4dc85c4 100755
--- a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.py
@@ -14,7 +14,7 @@
 # License along with kicad-footprint-generator. If not, see
 # <http://www.gnu.org/licenses/>.
 # 
-# Copyright (C) 2019 by Caleb Reister <calebreister@gmail.com>
+# Copyright (C) 2020 by Caleb Reister <calebreister@gmail.com>
 #
 
 import sys
@@ -66,9 +66,9 @@ def generate_one_footprint(param, config, default_lib):
         # Compute next pad location
         pos = {'x': pin1.x + (p // 2)*pitch,
                'y': pin1.y - (p  % 2)*(2*pin1.y)}
+        pin.append(pos)
         
         # Create pad
-        pin.append(pos)
         pad = Pad(number = str(p+1),
                   at = pos,
                   size = (pad_w, pad_h),
@@ -271,7 +271,6 @@ def generate_one_footprint(param, config, default_lib):
             config = yaml.safe_load(config_stream)
         except yaml.YAMLError as exc:
             print(exc)
-
     with open(args.series_config, 'r') as config_stream:
         try:
             config.update(yaml.safe_load(config_stream))
@@ -283,30 +282,23 @@ def generate_one_footprint(param, config, default_lib):
         sys.exit(1)
 
     print("Default Library:", args.library)
-    
     for path in args.files:
         print("Reading", path)
         with open(path, 'r') as stream:
             try:
                 footprints = yaml.safe_load(stream)
-                
                 if footprints is None:
                     print(path, "empty, skipping...")
                     continue
-
                 dictInherit(footprints)
-
                 for fp_name in footprints:
                     fp_params = footprints.get(fp_name)                    
                     if 'name' in fp_params:
                         print("WARNING: setting 'name' to", fp_name)
-                        
                     fp_params['name'] = fp_name
-
                     print("  - ",
                           fp_params.get('library', args.library), ".pretty/",
                           fp_name, ".kicad_mod", sep="")
-                    
                     generate_one_footprint(fp_params, config, args.library)
             except yaml.YAMLError as exc:
                 print(exc)
diff --git a/scripts/Connector/Connector_Samtec/mPOWER_Vertical.json b/scripts/Connector/Connector_Samtec/mPOWER_Vertical.json
new file mode 100644
index 000000000..7c15bac25
--- /dev/null
+++ b/scripts/Connector/Connector_Samtec/mPOWER_Vertical.json
@@ -0,0 +1,133 @@
+{
+    "Samtec_UMPT-02-xx.x-x-VT-SM_P2.0mm_Vertical": {
+        "library": "Connector_Samtec",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Ultra Micro Power Terminal",
+            "datasheet": "http://suddendocs.samtec.com/catalog_english/umpt.pdf",
+            "tags": "connector Samtec mPOWER UMPT power terminal vertical"
+        },
+        "layout": {"type": "Terminal", "width": [11.3], "height": 7.6},
+        "pads": {"n": 2, "pitch": 2.0, "width": 1.25, "height": 3.5}
+    },
+    "Samtec_UMPT-02-xx.x-x-VT-SM-WT_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPT-02-xx.x-x-VT-SM_P2.0mm_Vertical",
+        "meta": {"+tags": " weld-tab"},
+        "holes": [
+            {"drill": 0.8, "pad": 1.3, "x":  4.85, "y":  0.3},
+            {"drill": 0.8, "pad": 1.3, "x":  4.85, "y": -1.7},
+            {"drill": 0.8, "pad": 1.3, "x": -4.85, "y":  0.8},
+            {"drill": 0.8, "pad": 1.3, "x": -4.85, "y": -1.2}
+        ]
+    },
+    "Samtec_UMPT-03-xx.x-x-VT-SM_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPT-02-xx.x-x-VT-SM_P2.0mm_Vertical",
+        "layout": {"width": [13.3]},
+        "pads": {"n": 3}
+    },
+    "Samtec_UMPT-03-xx.x-x-VT-SM-WT_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPT-03-xx.x-x-VT-SM_P2.0mm_Vertical",
+        "meta": {"+tags": " weld-tab"},
+        "holes": [
+            {"drill": 0.8, "pad": 1.3, "x":  5.85, "y":  0.3},
+            {"drill": 0.8, "pad": 1.3, "x":  5.85, "y": -1.7},
+            {"drill": 0.8, "pad": 1.3, "x": -5.85, "y":  0.8},
+            {"drill": 0.8, "pad": 1.3, "x": -5.85, "y": -1.2}
+        ]
+    },
+    "Samtec_UMPT-04-xx.x-x-VT-SM_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPT-02-xx.x-x-VT-SM_P2.0mm_Vertical",
+        "layout": {"width": [15.3]},
+        "pads": {"n": 4}
+    },
+    "Samtec_UMPT-04-xx.x-x-VT-SM-WT_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPT-04-xx.x-x-VT-SM_P2.0mm_Vertical",
+        "meta": {"+tags": " weld-tab"},
+        "holes": [
+            {"drill": 0.8, "pad": 1.3, "x":  6.85, "y":  0.3},
+            {"drill": 0.8, "pad": 1.3, "x":  6.85, "y": -1.7},
+            {"drill": 0.8, "pad": 1.3, "x": -6.85, "y":  0.8},
+            {"drill": 0.8, "pad": 1.3, "x": -6.85, "y": -1.2}
+        ]
+    },
+    "Samtec_UMPT-05-xx.x-x-VT-SM_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPT-02-xx.x-x-VT-SM_P2.0mm_Vertical",
+        "layout": {"width": [17.3]},
+        "pads": {"n": 5}
+    },
+    "Samtec_UMPT-05-xx.x-x-VT-SM-WT_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPT-05-xx.x-x-VT-SM_P2.0mm_Vertical",
+        "meta": {"+tags": " weld-tab"},
+        "holes": [
+            {"drill": 0.8, "pad": 1.3, "x":  7.85, "y":  0.3},
+            {"drill": 0.8, "pad": 1.3, "x":  7.85, "y": -1.7},
+            {"drill": 0.8, "pad": 1.3, "x": -7.85, "y":  0.8},
+            {"drill": 0.8, "pad": 1.3, "x": -7.85, "y": -1.2}
+        ]
+    },
+
+    "Samtec_UMPS-02-xx.x-x-VT-SM_P2.0mm_Vertical": {
+        "library": "Connector_Samtec",
+        "meta": {
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Ultra Micro Power Socket",
+            "datasheet": "http://suddendocs.samtec.com/catalog_english/umps.pdf",
+            "tags": "connector Samtec mPOWER UMPS power socket vertical"
+        },
+        "layout": {"type": "Socket", "width": [9.05, 7.65], "height": 6.2},
+        "pads": {"n": 2, "pitch": 2.0, "width": 1.30, "height": 3.5}
+    },
+    "Samtec_UMPS-02-xx.x-x-VT-SM-WT_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPS-02-xx.x-x-VT-SM_P2.0mm_Vertical",
+        "meta": {"+tags": " weld-tab"},
+        "holes": [
+            {"drill": 0.8, "pad": 1.3, "x": -3.0, "y":  0.5},
+            {"drill": 0.8, "pad": 1.3, "x": -3.0, "y": -1.5},
+            {"drill": 0.8, "pad": 1.3, "x":  3.0, "y":  1.0},
+            {"drill": 0.8, "pad": 1.3, "x":  3.0, "y": -1.0}
+        ]
+    },
+    "Samtec_UMPS-03-xx.x-x-VT-SM_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPS-02-xx.x-x-VT-SM_P2.0mm_Vertical",
+        "layout": {"width": [11.05, 9.65]},
+        "pads": {"n": 3}
+    },
+    "Samtec_UMPS-03-xx.x-x-VT-SM-WT_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPS-03-xx.x-x-VT-SM_P2.0mm_Vertical",
+        "meta": {"+tags": " weld-tab"},
+        "holes": [
+            {"drill": 0.8, "pad": 1.3, "x": -4.0, "y":  0.5},
+            {"drill": 0.8, "pad": 1.3, "x": -4.0, "y": -1.5},
+            {"drill": 0.8, "pad": 1.3, "x":  4.0, "y":  1.0},
+            {"drill": 0.8, "pad": 1.3, "x":  4.0, "y": -1.0}
+        ]
+    },
+    "Samtec_UMPS-04-xx.x-x-VT-SM_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPS-02-xx.x-x-VT-SM_P2.0mm_Vertical",
+        "layout": {"width": [13.05, 11.65]},
+        "pads": {"n": 4}
+    },
+    "Samtec_UMPS-04-xx.x-x-VT-SM-WT_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPS-04-xx.x-x-VT-SM_P2.0mm_Vertical",
+        "meta": {"+tags": " weld-tab"},
+        "holes": [
+            {"drill": 0.8, "pad": 1.3, "x": -5.0, "y":  0.5},
+            {"drill": 0.8, "pad": 1.3, "x": -5.0, "y": -1.5},
+            {"drill": 0.8, "pad": 1.3, "x":  5.0, "y":  1.0},
+            {"drill": 0.8, "pad": 1.3, "x":  5.0, "y": -1.0}
+        ]
+    },
+    "Samtec_UMPS-05-xx.x-x-VT-SM_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPS-02-xx.x-x-VT-SM_P2.0mm_Vertical",
+        "layout": {"width": [15.05, 13.65]},
+        "pads": {"n": 5}
+    },
+    "Samtec_UMPS-05-xx.x-x-VT-SM-WT_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPS-05-xx.x-x-VT-SM_P2.0mm_Vertical",
+        "meta": {"+tags": " weld-tab"},
+        "holes": [
+            {"drill": 0.8, "pad": 1.3, "x": -6.0, "y":  0.5},
+            {"drill": 0.8, "pad": 1.3, "x": -6.0, "y": -1.5},
+            {"drill": 0.8, "pad": 1.3, "x":  6.0, "y":  1.0},
+            {"drill": 0.8, "pad": 1.3, "x":  6.0, "y": -1.0}
+        ]
+    }
+}
diff --git a/scripts/Connector/Connector_Samtec/mPOWER_Vertical.py b/scripts/Connector/Connector_Samtec/mPOWER_Vertical.py
new file mode 100755
index 000000000..09aaa04de
--- /dev/null
+++ b/scripts/Connector/Connector_Samtec/mPOWER_Vertical.py
@@ -0,0 +1,252 @@
+#!/usr/bin/python
+
+# This file is part of kicad-footprint-generator.
+# 
+# kicad-footprint-generator is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+# 
+# kicad-footprint-generator is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+# more details. You should have received a copy of the GNU General Public
+# License along with kicad-footprint-generator. If not, see
+# <http://www.gnu.org/licenses/>.
+# 
+# Copyright (C) 2020 by Caleb Reister <calebreister@gmail.com>
+#
+
+import sys
+import os
+import argparse
+from copy import deepcopy
+import math
+import yaml
+
+# Load parent path of KicadModTree
+sys.path.append(os.path.join(sys.path[0], "..", "..", ".."))
+sys.path.append(os.path.join(sys.path[0], "..", "..", "tools"))
+
+from KicadModTree import *
+from footprint_text_fields import addTextFields
+from helpers import *
+from dict_tools import *
+
+def generate_one_footprint(param, config, default_lib):
+    fp = Footprint(param['name'])
+    mode = param['layout']['type'].capitalize()
+    #if mode != "Terminal" or mode != "Socket":
+    #    raise ValueError("Connector type must be either 'Terminal' or 'Socket'")
+
+    # Pad parameters
+    pitch = param['pads']['pitch']
+    pad_w = param['pads']['width']
+    pad_h = param['pads']['height']
+    pins  = param['pads']['n'] # Pin count
+
+    ############################################################################
+    # Place pads
+    pin = []
+    for p in range(pins):
+        # Compute next pad location
+        pos = (-pins*pitch/2 + pitch/2 + p*pitch, 0)
+        pin.append(pos)
+        
+        # Create pad
+        pad = Pad(number = str(p+1),
+                  at = pos,
+                  size = (pad_w, pad_h),
+                  type = Pad.TYPE_SMT,
+                  layers = Pad.LAYERS_SMT,
+                  shape = Pad.SHAPE_RECT)
+        fp.append(pad)
+
+    ############################################################################
+    # Holes
+    for p in param.get('holes', {}):
+        h = [Pad(number = "",
+                 at     = (p['x'], p['y']),
+                 drill  = p['drill'],
+                 size   = p['pad'],
+                 type   = Pad.TYPE_THT   if 'pad' in p else Pad.TYPE_NPTH,
+                 layers = Pad.LAYERS_THT if 'pad' in p else Pad.LAYERS_NPTH,
+                 shape  = Pad.SHAPE_CIRCLE)]
+        fp.extend(h)
+    
+    ############################################################################
+    # Fabrication layer: F.Fab
+    fab_line = config['fab_line_width']
+    fab_mark = config['fab_pin1_marker_length']
+    fab_w = param['layout']['width']
+    fab_h = param['layout']['height']
+    
+    if mode == "Terminal":
+        chamfer = 0.085*fab_h
+        outline = [(-fab_w[0]/2 + chamfer, -fab_h/2),
+                   (-fab_w[0]/2, -fab_h/2 + chamfer),
+                   (-fab_w[0]/2,  fab_h/2),
+                   ( fab_w[0]/2,  fab_h/2),
+                   ( fab_w[0]/2, -fab_h/2),
+                   (-fab_w[0]/2 + chamfer, -fab_h/2)]
+    elif mode == "Socket":
+        chamfer = 0.1*fab_h
+        outline = [(-fab_w[0]/2, -fab_h/2),
+                   (-fab_w[0]/2, -fab_h/2 + (fab_w[0]-fab_w[1])/2),
+                   (-fab_w[1]/2, -fab_h/2 + (fab_w[0]-fab_w[1])/2),
+                   (-fab_w[1]/2,  fab_h/2 - chamfer),
+                   (-fab_w[1]/2 + chamfer, fab_h/2),
+                   ( fab_w[1]/2,  fab_h/2),
+                   ( fab_w[1]/2, -fab_h/2 + (fab_w[0]-fab_w[1])/2),
+                   ( fab_w[0]/2, -fab_h/2 + (fab_w[0]-fab_w[1])/2),
+                   ( fab_w[0]/2, -fab_h/2),
+                   (-fab_w[0]/2, -fab_h/2)]
+    
+    fp.append(PolygoneLine(nodes = outline,
+                               layer = "F.Fab",
+                               width = fab_line))
+
+    ############################################################################
+    # Silkscreen: F.SilkS
+    silk_offset = config['silk_fab_offset']
+    silk_pad = {'x': config['silk_pad_clearance'] + pad_w/2,
+                'y': config['silk_pad_clearance'] + pad_h/2}
+    silk_line = config['silk_line_width']
+    silk_w = [w + 2*silk_offset for w in fab_w]
+    silk_h = fab_h + 2*silk_offset
+    silk_chamfer = chamfer + silk_offset/2
+
+    if mode == "Terminal":
+        silk_outline = [(-silk_w[0]/2 + silk_chamfer, -silk_h/2),
+                        (-silk_w[0]/2, -silk_h/2 + silk_chamfer),
+                        (-silk_w[0]/2,  silk_h/2),
+                        ( silk_w[0]/2,  silk_h/2),
+                        ( silk_w[0]/2, -silk_h/2),
+                        (-silk_w[0]/2 + silk_chamfer, -silk_h/2)]
+    elif mode == "Socket":
+        silk_outline = [(-silk_w[0]/2, -silk_h/2),
+                        (-silk_w[0]/2, -silk_h/2 + (silk_w[0]-silk_w[1])/2 + 2*silk_offset),
+                        (-silk_w[1]/2, -silk_h/2 + (silk_w[0]-silk_w[1])/2 + 2*silk_offset),
+                        (-silk_w[1]/2,  silk_h/2 - silk_chamfer),
+                        (-silk_w[1]/2 + silk_chamfer, silk_h/2),
+                        ( silk_w[1]/2,  silk_h/2),
+                        ( silk_w[1]/2, -silk_h/2 + (silk_w[0]-silk_w[1])/2 + 2*silk_offset),
+                        ( silk_w[0]/2, -silk_h/2 + (silk_w[0]-silk_w[1])/2 + 2*silk_offset),
+                        ( silk_w[0]/2, -silk_h/2),
+                        (-silk_w[0]/2, -silk_h/2)]
+
+    fp.append(PolygoneLine(nodes = silk_outline,
+                           layer = "F.SilkS",
+                           width = silk_line))
+    
+    ############################################################################
+    # Courtyard: F.CrtYd
+    court_line = config['courtyard_line_width']
+    court_grid = config['courtyard_grid']
+    court_offset = config['courtyard_offset']['connector']
+
+    
+    court_x = roundToBase(fab_w[0]/2 + court_offset, court_grid)
+    court_y = roundToBase(fab_h/2 + court_offset, court_grid)
+
+    fp.append(RectLine(start  = (-court_x, -court_y),
+                       end    = ( court_x,  court_y),
+                       layer  = "F.CrtYd",
+                       width  = court_line))
+    
+    ############################################################################
+    # Set Metadata
+    # Draw reference and value
+    text_y = court_y + 1.0
+    fp.append(Text(type = 'reference', text = 'REF**',
+                   at = (0, -text_y),
+                   layer = "F.SilkS"))
+    fp.append(Text(type = 'user', text = '%R',
+                   at = (0, -text_y),
+                   layer = "F.Fab"))
+    fp.append(Text(type = 'value', text=param['name'],
+                   at = (0, text_y),
+                   layer="F.Fab"))
+    
+    # Set surface-mount attribute
+    fp.setAttribute('smd')
+    
+    # Part number
+    partnum = param['meta'].get('pn', param['name'].split('_')[1])
+    
+    # Description
+    desc = param['meta']['description']
+    desc = desc.format(pn = partnum,
+                       pitch = pitch)
+    fp.setDescription(desc + ", generated with kicad-footprint-generator"
+                      + ", " + param['meta']['datasheet'])
+    
+    # Tags
+    tags = param['meta']['tags']
+    fp.setTags(tags)
+    
+    # 3D model path
+    library = param.get('library', default_lib)
+    model_path = os.path.join("${KISYS3DMOD}",
+                              library+".3dshapes",
+                              param['name'] + ".wrl")
+    fp.append(Model(filename = model_path))
+    
+    ############################################################################
+    # Write kicad_mod file
+    os.makedirs(library+'.pretty', exist_ok=True)
+    filename = os.path.join(library+'.pretty', param['name']+'.kicad_mod')
+    KicadFileHandler(fp).writeFile(filename)
+
+################################################################################
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser()
+    parser.add_argument('--global-config', type=str, nargs='?',
+                        default='../../tools/global_config_files/config_KLCv3.0.yaml',
+                        help='Global KLC configuration YAML file')
+    parser.add_argument('--series-config', type=str, nargs='?',
+                        default='../conn_config_KLCv3.yaml',
+                        help='Series KLC configuration YAML file')
+    parser.add_argument('--library', type=str, nargs='?',
+                        default='Connector_Samtec',
+                        help='Default KiCad library name (without extension)')
+    parser.add_argument('files', metavar='file', type=str, nargs='*',
+                        help='YAML file(s) containing footprint parameters')
+    args = parser.parse_args()
+
+    with open(args.global_config, 'r') as config_stream:
+        try:
+            config = yaml.safe_load(config_stream)
+        except yaml.YAMLError as exc:
+            print(exc)
+    with open(args.series_config, 'r') as config_stream:
+        try:
+            config.update(yaml.safe_load(config_stream))
+        except yaml.YAMLError as exc:
+            print(exc)
+
+    if len(args.files) == 0:
+        parser.print_help()
+        sys.exit(1)
+
+    print("Default Library:", args.library)
+    for path in args.files:
+        print("Reading", path)
+        with open(path, 'r') as stream:
+            try:
+                footprints = yaml.safe_load(stream)
+                if footprints is None:
+                    print(path, "empty, skipping...")
+                    continue
+                dictInherit(footprints)
+                for fp_name in footprints:
+                    fp_params = footprints.get(fp_name)                    
+                    if 'name' in fp_params:
+                        print("WARNING: setting 'name' to", fp_name)
+                    fp_params['name'] = fp_name
+                    print("  - ",
+                          fp_params.get('library', args.library), ".pretty/",
+                          fp_name, ".kicad_mod", sep="")
+                    generate_one_footprint(fp_params, config, args.library)
+            except yaml.YAMLError as exc:
+                print(exc)

From cd7e3f5ccca736c1969b13ca3b5491e65c66f46a Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sun, 20 Sep 2020 19:47:50 -0700
Subject: [PATCH 58/62] Add pin names to welding tab holes in
 mPOWER_Vertical.json

---
 .../Connector_Samtec/mPOWER_Vertical.json     | 64 +++++++++----------
 .../Connector_Samtec/mPOWER_Vertical.py       |  4 +-
 2 files changed, 34 insertions(+), 34 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/mPOWER_Vertical.json b/scripts/Connector/Connector_Samtec/mPOWER_Vertical.json
index 7c15bac25..da2810a6b 100644
--- a/scripts/Connector/Connector_Samtec/mPOWER_Vertical.json
+++ b/scripts/Connector/Connector_Samtec/mPOWER_Vertical.json
@@ -13,10 +13,10 @@
         "inherit": "Samtec_UMPT-02-xx.x-x-VT-SM_P2.0mm_Vertical",
         "meta": {"+tags": " weld-tab"},
         "holes": [
-            {"drill": 0.8, "pad": 1.3, "x":  4.85, "y":  0.3},
-            {"drill": 0.8, "pad": 1.3, "x":  4.85, "y": -1.7},
-            {"drill": 0.8, "pad": 1.3, "x": -4.85, "y":  0.8},
-            {"drill": 0.8, "pad": 1.3, "x": -4.85, "y": -1.2}
+            {"drill": 0.8, "pad": 1.3, "x":  4.85, "y":  0.3, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x":  4.85, "y": -1.7, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x": -4.85, "y":  0.8, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x": -4.85, "y": -1.2, "name": "MP"}
         ]
     },
     "Samtec_UMPT-03-xx.x-x-VT-SM_P2.0mm_Vertical": {
@@ -28,10 +28,10 @@
         "inherit": "Samtec_UMPT-03-xx.x-x-VT-SM_P2.0mm_Vertical",
         "meta": {"+tags": " weld-tab"},
         "holes": [
-            {"drill": 0.8, "pad": 1.3, "x":  5.85, "y":  0.3},
-            {"drill": 0.8, "pad": 1.3, "x":  5.85, "y": -1.7},
-            {"drill": 0.8, "pad": 1.3, "x": -5.85, "y":  0.8},
-            {"drill": 0.8, "pad": 1.3, "x": -5.85, "y": -1.2}
+            {"drill": 0.8, "pad": 1.3, "x":  5.85, "y":  0.3, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x":  5.85, "y": -1.7, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x": -5.85, "y":  0.8, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x": -5.85, "y": -1.2, "name": "MP"}
         ]
     },
     "Samtec_UMPT-04-xx.x-x-VT-SM_P2.0mm_Vertical": {
@@ -43,10 +43,10 @@
         "inherit": "Samtec_UMPT-04-xx.x-x-VT-SM_P2.0mm_Vertical",
         "meta": {"+tags": " weld-tab"},
         "holes": [
-            {"drill": 0.8, "pad": 1.3, "x":  6.85, "y":  0.3},
-            {"drill": 0.8, "pad": 1.3, "x":  6.85, "y": -1.7},
-            {"drill": 0.8, "pad": 1.3, "x": -6.85, "y":  0.8},
-            {"drill": 0.8, "pad": 1.3, "x": -6.85, "y": -1.2}
+            {"drill": 0.8, "pad": 1.3, "x":  6.85, "y":  0.3, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x":  6.85, "y": -1.7, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x": -6.85, "y":  0.8, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x": -6.85, "y": -1.2, "name": "MP"}
         ]
     },
     "Samtec_UMPT-05-xx.x-x-VT-SM_P2.0mm_Vertical": {
@@ -58,10 +58,10 @@
         "inherit": "Samtec_UMPT-05-xx.x-x-VT-SM_P2.0mm_Vertical",
         "meta": {"+tags": " weld-tab"},
         "holes": [
-            {"drill": 0.8, "pad": 1.3, "x":  7.85, "y":  0.3},
-            {"drill": 0.8, "pad": 1.3, "x":  7.85, "y": -1.7},
-            {"drill": 0.8, "pad": 1.3, "x": -7.85, "y":  0.8},
-            {"drill": 0.8, "pad": 1.3, "x": -7.85, "y": -1.2}
+            {"drill": 0.8, "pad": 1.3, "x":  7.85, "y":  0.3, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x":  7.85, "y": -1.7, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x": -7.85, "y":  0.8, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x": -7.85, "y": -1.2, "name": "MP"}
         ]
     },
 
@@ -79,10 +79,10 @@
         "inherit": "Samtec_UMPS-02-xx.x-x-VT-SM_P2.0mm_Vertical",
         "meta": {"+tags": " weld-tab"},
         "holes": [
-            {"drill": 0.8, "pad": 1.3, "x": -3.0, "y":  0.5},
-            {"drill": 0.8, "pad": 1.3, "x": -3.0, "y": -1.5},
-            {"drill": 0.8, "pad": 1.3, "x":  3.0, "y":  1.0},
-            {"drill": 0.8, "pad": 1.3, "x":  3.0, "y": -1.0}
+            {"drill": 0.8, "pad": 1.3, "x": -3.0, "y":  0.5, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x": -3.0, "y": -1.5, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x":  3.0, "y":  1.0, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x":  3.0, "y": -1.0, "name": "MP"}
         ]
     },
     "Samtec_UMPS-03-xx.x-x-VT-SM_P2.0mm_Vertical": {
@@ -94,10 +94,10 @@
         "inherit": "Samtec_UMPS-03-xx.x-x-VT-SM_P2.0mm_Vertical",
         "meta": {"+tags": " weld-tab"},
         "holes": [
-            {"drill": 0.8, "pad": 1.3, "x": -4.0, "y":  0.5},
-            {"drill": 0.8, "pad": 1.3, "x": -4.0, "y": -1.5},
-            {"drill": 0.8, "pad": 1.3, "x":  4.0, "y":  1.0},
-            {"drill": 0.8, "pad": 1.3, "x":  4.0, "y": -1.0}
+            {"drill": 0.8, "pad": 1.3, "x": -4.0, "y":  0.5, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x": -4.0, "y": -1.5, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x":  4.0, "y":  1.0, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x":  4.0, "y": -1.0, "name": "MP"}
         ]
     },
     "Samtec_UMPS-04-xx.x-x-VT-SM_P2.0mm_Vertical": {
@@ -109,10 +109,10 @@
         "inherit": "Samtec_UMPS-04-xx.x-x-VT-SM_P2.0mm_Vertical",
         "meta": {"+tags": " weld-tab"},
         "holes": [
-            {"drill": 0.8, "pad": 1.3, "x": -5.0, "y":  0.5},
-            {"drill": 0.8, "pad": 1.3, "x": -5.0, "y": -1.5},
-            {"drill": 0.8, "pad": 1.3, "x":  5.0, "y":  1.0},
-            {"drill": 0.8, "pad": 1.3, "x":  5.0, "y": -1.0}
+            {"drill": 0.8, "pad": 1.3, "x": -5.0, "y":  0.5, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x": -5.0, "y": -1.5, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x":  5.0, "y":  1.0, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x":  5.0, "y": -1.0, "name": "MP"}
         ]
     },
     "Samtec_UMPS-05-xx.x-x-VT-SM_P2.0mm_Vertical": {
@@ -124,10 +124,10 @@
         "inherit": "Samtec_UMPS-05-xx.x-x-VT-SM_P2.0mm_Vertical",
         "meta": {"+tags": " weld-tab"},
         "holes": [
-            {"drill": 0.8, "pad": 1.3, "x": -6.0, "y":  0.5},
-            {"drill": 0.8, "pad": 1.3, "x": -6.0, "y": -1.5},
-            {"drill": 0.8, "pad": 1.3, "x":  6.0, "y":  1.0},
-            {"drill": 0.8, "pad": 1.3, "x":  6.0, "y": -1.0}
+            {"drill": 0.8, "pad": 1.3, "x": -6.0, "y":  0.5, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x": -6.0, "y": -1.5, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x":  6.0, "y":  1.0, "name": "MP"},
+            {"drill": 0.8, "pad": 1.3, "x":  6.0, "y": -1.0, "name": "MP"}
         ]
     }
 }
diff --git a/scripts/Connector/Connector_Samtec/mPOWER_Vertical.py b/scripts/Connector/Connector_Samtec/mPOWER_Vertical.py
index 09aaa04de..739ef6db7 100755
--- a/scripts/Connector/Connector_Samtec/mPOWER_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/mPOWER_Vertical.py
@@ -65,10 +65,10 @@ def generate_one_footprint(param, config, default_lib):
     ############################################################################
     # Holes
     for p in param.get('holes', {}):
-        h = [Pad(number = "",
+        h = [Pad(number = p.get('name', ""),
                  at     = (p['x'], p['y']),
                  drill  = p['drill'],
-                 size   = p['pad'],
+                 size   = p.get('pad', p['drill']),
                  type   = Pad.TYPE_THT   if 'pad' in p else Pad.TYPE_NPTH,
                  layers = Pad.LAYERS_THT if 'pad' in p else Pad.LAYERS_NPTH,
                  shape  = Pad.SHAPE_CIRCLE)]

From 5d7dd1dd11f96bd5943fe5e1e927e0b2122c44bd Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Tue, 22 Sep 2020 20:02:48 -0700
Subject: [PATCH 59/62] Minor edits to QStrip_Vertical.py

Fixed: pin placement/numbering error introduced in 19a4add
Changed: simplify plane pad code in preparation to add Q2 support
---
 .../Connector_Samtec/QStrip_Vertical.json     | 36 ++++++++++++-------
 .../Connector_Samtec/QStrip_Vertical.py       | 20 +++++------
 2 files changed, 33 insertions(+), 23 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.json b/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
index b5309de1c..9bf546e67 100644
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.json
@@ -11,8 +11,10 @@
         "pads": {
             "signal": {"n": 60, "pitch": 0.5, "width": 0.305, "height": 1.45, "y": 3.086},
             "planes": [
-                {"n": 2, "pitch": 16.89, "width": 2.54, "height": 0.635, "y": 0},
-                {"n": 2, "pitch":  6.35, "width": 4.70, "height": 0.635, "y": 0}
+                {"width": 2.54, "height": 0.635, "x": -8.445, "y": 0},
+                {"width": 2.54, "height": 0.635, "x":  8.445, "y": 0},
+                {"width": 4.70, "height": 0.635, "x": -3.175, "y": 0},
+                {"width": 4.70, "height": 0.635, "x":  3.175, "y": 0}
             ]
         }
     },
@@ -98,8 +100,10 @@
         "pads": {
             "signal": {"n": 60, "pitch": 0.5, "width": 0.279, "height": 2.27, "y": 2.865},
             "planes": [
-                {"n": 2, "pitch": 16.13, "width": 2.54, "height": 0.43, "y": 0},
-                {"n": 2, "pitch":  6.35, "width": 4.7,  "height": 0.43, "y": 0}
+                {"width": 2.54, "height": 0.430, "x": -8.065, "y": 0},
+                {"width": 2.54, "height": 0.430, "x":  8.065, "y": 0},
+                {"width": 4.70, "height": 0.430, "x": -3.175, "y": 0},
+                {"width": 4.70, "height": 0.430, "x":  3.175, "y": 0}
             ]
         }
     },
@@ -185,8 +189,10 @@
         "pads": {
             "signal": {"n": 50, "pitch": 0.635, "width": 0.406, "height": 1.45, "y": 3.086},
             "planes": [
-                {"n": 2, "pitch": 16.89, "width": 2.54, "height": 0.635, "y": 0},
-                {"n": 2, "pitch":  6.35, "width": 4.70, "height": 0.635, "y": 0}
+                {"width": 2.54, "height": 0.635, "x": -8.445, "y": 0},
+                {"width": 2.54, "height": 0.635, "x":  8.445, "y": 0},
+                {"width": 4.70, "height": 0.635, "x": -3.175, "y": 0},
+                {"width": 4.70, "height": 0.635, "x":  3.175, "y": 0}
             ]
         }
     },
@@ -261,8 +267,10 @@
         "pads": {
             "signal": {"n": 50, "pitch": 0.635, "width": 0.406, "height": 2.273, "y": 2.865},
             "planes": [
-                {"n": 2, "pitch": 16.13, "width": 2.8, "height": 0.432, "y": 0},
-                {"n": 2, "pitch":  6.35, "width": 4.7, "height": 0.432, "y": 0}
+                {"width": 2.80, "height": 0.432, "x": -8.065, "y": 0},
+                {"width": 2.80, "height": 0.432, "x":  8.065, "y": 0},
+                {"width": 4.70, "height": 0.432, "x": -3.175, "y": 0},
+                {"width": 4.70, "height": 0.432, "x":  3.175, "y": 0}
             ]
         }
     },
@@ -337,8 +345,10 @@
         "pads": {
             "signal": {"n": 40, "pitch": 0.8, "width": 0.46, "height": 1.45, "y": 3.086},
             "planes": [
-                {"n": 2, "pitch": 16.89, "width": 2.54, "height": 0.635, "y": 0},
-                {"n": 2, "pitch":  6.35, "width": 4.7,  "height": 0.635, "y": 0}
+                {"width": 2.54, "height": 0.635, "x": -8.445, "y": 0},
+                {"width": 2.54, "height": 0.635, "x":  8.445, "y": 0},
+                {"width": 4.70, "height": 0.635, "x": -3.175, "y": 0},
+                {"width": 4.70, "height": 0.635, "x":  3.175, "y": 0}
             ]
         }
     },
@@ -413,8 +423,10 @@
         "pads": {
             "signal": {"n": 40, "pitch": 0.8, "width": 0.41, "height": 2.27, "y": 2.865},
             "planes": [
-                {"n": 2, "pitch": 16.13, "width": 2.54, "height": 0.43, "y": 0},
-                {"n": 2, "pitch":  6.35, "width": 4.7,  "height": 0.43, "y": 0}
+                {"width": 2.54, "height": 0.430, "x": -8.065, "y": 0},
+                {"width": 2.54, "height": 0.430, "x":  8.065, "y": 0},
+                {"width": 4.70, "height": 0.430, "x": -3.175, "y": 0},
+                {"width": 4.70, "height": 0.430, "x":  3.175, "y": 0}
             ]
         }
     },
diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
index 38e064aff..62e6c68de 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
@@ -80,7 +80,6 @@ def generate_one_footprint(param, config, default_lib):
             pos = {'x': x_inv * (pin1.x + (slot // 2)*pitch + b*bank_x),
                    'y': pin1.y - (slot  % 2)*(2*pin1.y),
                    'n': n+1, 'slot': slot}
-            pin[b].append(pos) # Add position to list
 
             # Skip slots for differential banks
             if b < param['banks']['diff']:
@@ -92,7 +91,7 @@ def generate_one_footprint(param, config, default_lib):
                     continue
 
             # Create pad
-            # Create pad (both single-ended and differential)
+            pin[b].append(pos) # Add position to list
             pad = Pad(number = str(n),
                       at = pos,
                       size = (pad_w, pad_h),
@@ -104,15 +103,14 @@ def generate_one_footprint(param, config, default_lib):
     
         # Place plane pads
         mid = bank1_mid + x_inv*b*bank_x # Bank midpoint
-        if 'planes' in param['pads']:
-            for plane in param['pads']['planes']:
-                pad = [Pad(number = "P" + str(b+1),
-                           at = ((x - (plane['n']-1)/2)*plane['pitch'] + mid, plane['y']),
-                           size = (plane['width'], plane['height']),
-                           type = Pad.TYPE_SMT,
-                           layers = Pad.LAYERS_SMT,
-                           shape = Pad.SHAPE_RECT) for x in range(plane['n'])]
-                fp.extend(pad)
+        for plane in param['pads'].get('planes', {}):
+            pad = Pad(number = "P" + str(b+1),
+                      at = (plane['x'] + mid, plane['y']),
+                      size = (plane['width'], plane['height']),
+                      type = Pad.TYPE_SMT,
+                      layers = Pad.LAYERS_SMT,
+                      shape = Pad.SHAPE_RECT)
+            fp.append(pad)
 
     ############################################################################
     # Holes

From d03cf16243d621e5994b35b0fc3da045d93e5cbd Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Sun, 27 Sep 2020 22:19:26 -0700
Subject: [PATCH 60/62] Rename Samtec connector footprints based on KLC
 guidelines

---
 .../BasicBladeAndBeam_Vertical.json           | 256 +++++++++---------
 .../Connector_Samtec/RazorBeam_Vertical.json  |  82 +++---
 .../Connector_Samtec/mPOWER_Vertical.json     |  60 ++--
 3 files changed, 199 insertions(+), 199 deletions(-)

diff --git a/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.json b/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.json
index eb56d8263..e004273d4 100644
--- a/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.json
+++ b/scripts/Connector/Connector_Samtec/BasicBladeAndBeam_Vertical.json
@@ -1,8 +1,8 @@
 {
-    "Samtec_BTH-030-xx-x-D_P0.5mm_Vertical": {
+    "Samtec_BTH-030-xx-x-D_2x30_P0.5mm_Vertical": {
         "library": "Connector_Samtec_BasicBladeAndBeam",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.2f}mm Basic Blade & Beam {type:s}; {pins:d} pins ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Basic Blade & Beam {type:s}; {pins:d} pins; generated with kicad-footprint-generator",
             "datasheet": "http://suddendocs.samtec.com/catalog_english/bth.pdf",
             "tags": "connector Samtec BTH mezzanine terminal vertical"
         },
@@ -12,71 +12,71 @@
             "signal": {"n": 60, "pitch": 0.5, "width": 0.305, "height": 1.45, "y": 3.086}
         }
     },
-    "Samtec_BTH-030-xx-x-D-A_P0.5mm_Vertical": {
-        "inherit": "Samtec_BTH-030-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BTH-030-xx-x-D-A_2x30_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-030-xx-x-D_2x30_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 18.475, "y": -2.032}]
     },
-    "Samtec_BTH-050-xx-x-D_P0.5mm_Vertical": {
-        "inherit": "Samtec_BTH-030-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BTH-050-xx-x-D_2x50_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-030-xx-x-D_2x30_P0.5mm_Vertical",
         "layout": {"width": 30.0},
         "banks": {"width": 26.888},
         "pads": {"signal": {"n": 100}}
     },
-    "Samtec_BTH-050-xx-x-D-A_P0.5mm_Vertical": {
-        "inherit": "Samtec_BTH-050-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BTH-050-xx-x-D-A_2x50_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-050-xx-x-D_2x50_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 28.475, "y": -2.032}]
     },
-    "Samtec_BTH-060-xx-x-D_P0.5mm_Vertical": {
-        "inherit": "Samtec_BTH-030-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BTH-060-xx-x-D_2x60_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-030-xx-x-D_2x30_P0.5mm_Vertical",
         "layout": {"width": 35.0},
         "banks": {"width": 31.888},
         "pads": {"signal": {"n": 120}}
     },
-    "Samtec_BTH-060-xx-x-D-A_P0.5mm_Vertical": {
-        "inherit": "Samtec_BTH-060-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BTH-060-xx-x-D-A_2x60_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-060-xx-x-D_2x60_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 33.475, "y": -2.032}]
     },
-    "Samtec_BTH-090-xx-x-D_P0.5mm_Vertical": {
-        "inherit": "Samtec_BTH-030-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BTH-090-xx-x-D_2x90_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-030-xx-x-D_2x30_P0.5mm_Vertical",
         "layout": {"width": 50.0},
         "banks": {"width": 46.888},
         "pads": {"signal": {"n": 180}}
     },
-    "Samtec_BTH-090-xx-x-D-A_P0.5mm_Vertical": {
-        "inherit": "Samtec_BTH-090-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BTH-090-xx-x-D-A_2x90_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-090-xx-x-D_2x90_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 48.475, "y": -2.032}]
     },
-    "Samtec_BTH-120-xx-x-D_P0.5mm_Vertical": {
-        "inherit": "Samtec_BTH-030-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BTH-120-xx-x-D_2x120_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-030-xx-x-D_2x30_P0.5mm_Vertical",
         "layout": {"width": 65.0},
         "banks": {"width": 61.888},
         "pads": {"signal": {"n": 240}}
     },
-    "Samtec_BTH-120-xx-x-D-A_P0.5mm_Vertical": {
-        "inherit": "Samtec_BTH-120-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BTH-120-xx-x-D-A_2x120_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-120-xx-x-D_2x120_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 63.475, "y": -2.032}]
     },
-    "Samtec_BTH-150-xx-x-D_P0.5mm_Vertical": {
-        "inherit": "Samtec_BTH-030-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BTH-150-xx-x-D_2x150_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-030-xx-x-D_2x30_P0.5mm_Vertical",
         "layout": {"width": 80.0},
         "banks": {"width": 76.888},
         "pads": {"signal": {"n": 300}}
     },
-    "Samtec_BTH-150-xx-x-D-A_P0.5mm_Vertical": {
-        "inherit": "Samtec_BTH-150-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BTH-150-xx-x-D-A_2x150_P0.5mm_Vertical": {
+        "inherit": "Samtec_BTH-150-xx-x-D_2x150_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 78.475, "y": -2.032}]
     },
 
-    "Samtec_BSH-030-xx-x-D_P0.5mm_Vertical": {
+    "Samtec_BSH-030-xx-x-D_2x30_P0.5mm_Vertical": {
         "library": "Connector_Samtec_BasicBladeAndBeam",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.2f}mm Basic Blade & Beam {type:s}; {pins:d} pins ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Basic Blade & Beam {type:s}; {pins:d} pins; generated with kicad-footprint-generator",
             "datasheet": "http://suddendocs.samtec.com/catalog_english/bsh.pdf",
             "tags": "connector Samtec BSH mezzanine socket vertical"
         },
@@ -86,71 +86,71 @@
             "signal": {"n": 60, "pitch": 0.5, "width": 0.279, "height": 2.273, "y": 2.865}
         }
     },
-    "Samtec_BSH-030-xx-x-D-A_P0.5mm_Vertical": {
-        "inherit": "Samtec_BSH-030-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BSH-030-xx-x-D-A_2x30_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-030-xx-x-D_2x30_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 20.126, "y": 2.67}]
     },
-    "Samtec_BSH-050-xx-x-D_P0.5mm_Vertical": {
-        "inherit": "Samtec_BSH-030-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BSH-050-xx-x-D_2x50_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-030-xx-x-D_2x30_P0.5mm_Vertical",
         "layout": {"width": 31.27},
         "banks": {"width": 26.6},
         "pads": {"signal": {"n": 100}}
     },
-    "Samtec_BSH-050-xx-x-D-A_P0.5mm_Vertical": {
-        "inherit": "Samtec_BSH-050-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BSH-050-xx-x-D-A_2x50_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-050-xx-x-D_2x50_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 30.126, "y": 2.67}]
     },
-    "Samtec_BSH-060-xx-x-D_P0.5mm_Vertical": {
-        "inherit": "Samtec_BSH-030-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BSH-060-xx-x-D_2x60_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-030-xx-x-D_2x30_P0.5mm_Vertical",
         "layout": {"width": 36.27},
         "banks": {"width": 31.6},
         "pads": {"signal": {"n": 120}}
     },
-    "Samtec_BSH-060-xx-x-D-A_P0.5mm_Vertical": {
-        "inherit": "Samtec_BSH-060-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BSH-060-xx-x-D-A_2x60_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-060-xx-x-D_2x60_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 35.126, "y": 2.67}]
     },
-    "Samtec_BSH-090-xx-x-D_P0.5mm_Vertical": {
-        "inherit": "Samtec_BSH-030-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BSH-090-xx-x-D_2x90_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-030-xx-x-D_2x30_P0.5mm_Vertical",
         "layout": {"width": 51.27},
         "banks": {"width": 46.6},
         "pads": {"signal": {"n": 180}}
     },
-    "Samtec_BSH-090-xx-x-D-A_P0.5mm_Vertical": {
-        "inherit": "Samtec_BSH-090-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BSH-090-xx-x-D-A_2x90_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-090-xx-x-D_2x90_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 50.126, "y": 2.67}]
     },
-    "Samtec_BSH-120-xx-x-D_P0.5mm_Vertical": {
-        "inherit": "Samtec_BSH-030-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BSH-120-xx-x-D_2x120_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-030-xx-x-D_2x30_P0.5mm_Vertical",
         "layout": {"width": 66.27},
         "banks": {"width": 61.6},
         "pads": {"signal": {"n": 240}}
     },
-    "Samtec_BSH-120-xx-x-D-A_P0.5mm_Vertical": {
-        "inherit": "Samtec_BSH-120-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BSH-120-xx-x-D-A_2x120_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-120-xx-x-D_2x120_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 65.126, "y": 2.67}]
     },
-    "Samtec_BSH-150-xx-x-D_P0.5mm_Vertical": {
-        "inherit": "Samtec_BSH-030-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BSH-150-xx-x-D_2x150_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-030-xx-x-D_2x30_P0.5mm_Vertical",
         "layout": {"width": 81.27},
         "banks": {"width": 76.6},
         "pads": {"signal": {"n": 300}}
     },
-    "Samtec_BSH-150-xx-x-D-A_P0.5mm_Vertical": {
-        "inherit": "Samtec_BSH-150-xx-x-D_P0.5mm_Vertical",
+    "Samtec_BSH-150-xx-x-D-A_2x150_P0.5mm_Vertical": {
+        "inherit": "Samtec_BSH-150-xx-x-D_2x150_P0.5mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 80.126, "y": 2.67}]
     },
 
-    "Samtec_BTS-025-xx-x-D_P0.635mm_Vertical": {
+    "Samtec_BTS-025-xx-x-D_2x25_P0.635mm_Vertical": {
         "library": "Connector_Samtec_BasicBladeAndBeam",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.3f}mm Basic Blade & Beam {type:s}; {pins:d} pins ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.3f}mm Basic Blade & Beam {type:s}; {pins:d} pins; generated with kicad-footprint-generator",
             "datasheet": "http://suddendocs.samtec.com/catalog_english/bts.pdf",
             "tags": "connector Samtec BTS mezzanine terminal vertical"
         },
@@ -160,49 +160,49 @@
             "signal": {"n": 50, "pitch": 0.635, "width": 0.432, "height": 1.45, "y": 3.086}
         }
     },
-    "Samtec_BTS-025-xx-x-D-A_P0.635mm_Vertical": {
-        "inherit": "Samtec_BTS-025-xx-x-D_P0.635mm_Vertical",
+    "Samtec_BTS-025-xx-x-D-A_2x25_P0.635mm_Vertical": {
+        "inherit": "Samtec_BTS-025-xx-x-D_2x25_P0.635mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 18.48, "y": -2.032}]
     },
-    "Samtec_BTS-050-xx-x-D_P0.635mm_Vertical": {
-        "inherit": "Samtec_BTS-025-xx-x-D_P0.635mm_Vertical",
+    "Samtec_BTS-050-xx-x-D_2x50_P0.635mm_Vertical": {
+        "inherit": "Samtec_BTS-025-xx-x-D_2x25_P0.635mm_Vertical",
         "layout": {"width": 35.88},
         "banks": {"width": 32.77},
         "pads": {"signal": {"n": 100}}
     },
-    "Samtec_BTS-050-xx-x-D-A_P0.635mm_Vertical": {
-        "inherit": "Samtec_BTS-050-xx-x-D_P0.635mm_Vertical",
+    "Samtec_BTS-050-xx-x-D-A_2x50_P0.635mm_Vertical": {
+        "inherit": "Samtec_BTS-050-xx-x-D_2x50_P0.635mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 34.35, "y": -2.032}]
     },
-    "Samtec_BTS-075-xx-x-D_P0.635mm_Vertical": {
-        "inherit": "Samtec_BTS-025-xx-x-D_P0.635mm_Vertical",
+    "Samtec_BTS-075-xx-x-D_2x75_P0.635mm_Vertical": {
+        "inherit": "Samtec_BTS-025-xx-x-D_2x25_P0.635mm_Vertical",
         "layout": {"width": 51.76},
         "banks": {"width": 48.65},
         "pads": {"signal": {"n": 150}}
     },
-    "Samtec_BTS-075-xx-x-D-A_P0.635mm_Vertical": {
-        "inherit": "Samtec_BTS-075-xx-x-D_P0.635mm_Vertical",
+    "Samtec_BTS-075-xx-x-D-A_2x75_P0.635mm_Vertical": {
+        "inherit": "Samtec_BTS-075-xx-x-D_2x75_P0.635mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 50.23, "y": -2.032}]
     },
-    "Samtec_BTS-100-xx-x-D_P0.635mm_Vertical": {
-        "inherit": "Samtec_BTS-025-xx-x-D_P0.635mm_Vertical",
+    "Samtec_BTS-100-xx-x-D_2x100_P0.635mm_Vertical": {
+        "inherit": "Samtec_BTS-025-xx-x-D_2x25_P0.635mm_Vertical",
         "layout": {"width": 67.63},
         "banks": {"width": 64.52},
         "pads": {"signal": {"n": 200}}
     },
-    "Samtec_BTS-100-xx-x-D-A_P0.635mm_Vertical": {
-        "inherit": "Samtec_BTS-100-xx-x-D_P0.635mm_Vertical",
+    "Samtec_BTS-100-xx-x-D-A_2x100_P0.635mm_Vertical": {
+        "inherit": "Samtec_BTS-100-xx-x-D_2x100_P0.635mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 66.10, "y": -2.032}]
     },
 
-    "Samtec_BSS-025-xx-x-D_P0.635mm_Vertical": {
+    "Samtec_BSS-025-xx-x-D_2x25_P0.635mm_Vertical": {
         "library": "Connector_Samtec_BasicBladeAndBeam",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.3f}mm Basic Blade & Beam {type:s}; {pins:d} pins ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.3f}mm Basic Blade & Beam {type:s}; {pins:d} pins; generated with kicad-footprint-generator",
             "datasheet": "http://suddendocs.samtec.com/catalog_english/bss.pdf",
             "tags": "connector Samtec BSS mezzanine socket vertical"
         },
@@ -212,49 +212,49 @@
             "signal": {"n": 50, "pitch": 0.635, "width": 0.406, "height": 2.273, "y": 2.865}
         }
     },
-    "Samtec_BSS-025-xx-x-D-A_P0.635mm_Vertical": {
-        "inherit": "Samtec_BSS-025-xx-x-D_P0.635mm_Vertical",
+    "Samtec_BSS-025-xx-x-D-A_2x25_P0.635mm_Vertical": {
+        "inherit": "Samtec_BSS-025-xx-x-D_2x25_P0.635mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 20.00, "y": 2.67}]
     },
-    "Samtec_BSS-050-xx-x-D_P0.635mm_Vertical": {
-        "inherit": "Samtec_BSS-025-xx-x-D_P0.635mm_Vertical",
+    "Samtec_BSS-050-xx-x-D_2x50_P0.635mm_Vertical": {
+        "inherit": "Samtec_BSS-025-xx-x-D_2x25_P0.635mm_Vertical",
         "layout": {"width": 37.15},
         "banks": {"width": 32.52},
         "pads": {"signal": {"n": 100}}
     },
-    "Samtec_BSS-050-xx-x-D-A_P0.635mm_Vertical": {
-        "inherit": "Samtec_BSS-050-xx-x-D_P0.635mm_Vertical",
+    "Samtec_BSS-050-xx-x-D-A_2x50_P0.635mm_Vertical": {
+        "inherit": "Samtec_BSS-050-xx-x-D_2x50_P0.635mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 35.88, "y": 2.67}]
     },
-    "Samtec_BSS-075-xx-x-D_P0.635mm_Vertical": {
-        "inherit": "Samtec_BSS-025-xx-x-D_P0.635mm_Vertical",
+    "Samtec_BSS-075-xx-x-D_2x75_P0.635mm_Vertical": {
+        "inherit": "Samtec_BSS-025-xx-x-D_2x25_P0.635mm_Vertical",
         "layout": {"width": 53.02},
         "banks": {"width": 48.39},
         "pads": {"signal": {"n": 150}}
     },
-    "Samtec_BSS-075-xx-x-D-A_P0.635mm_Vertical": {
-        "inherit": "Samtec_BSS-075-xx-x-D_P0.635mm_Vertical",
+    "Samtec_BSS-075-xx-x-D-A_2x75_P0.635mm_Vertical": {
+        "inherit": "Samtec_BSS-075-xx-x-D_2x75_P0.635mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 51.75, "y": 2.67}]
     },
-    "Samtec_BSS-100-xx-x-D_P0.635mm_Vertical": {
-        "inherit": "Samtec_BSS-025-xx-x-D_P0.635mm_Vertical",
+    "Samtec_BSS-100-xx-x-D_2x100_P0.635mm_Vertical": {
+        "inherit": "Samtec_BSS-025-xx-x-D_2x25_P0.635mm_Vertical",
         "layout": {"width": 68.90},
         "banks": {"width": 64.27},
         "pads": {"signal": {"n": 200}}
     },
-    "Samtec_BSS-100-xx-x-D-A_P0.635mm_Vertical": {
-        "inherit": "Samtec_BSS-100-xx-x-D_P0.635mm_Vertical",
+    "Samtec_BSS-100-xx-x-D-A_2x100_P0.635mm_Vertical": {
+        "inherit": "Samtec_BSS-100-xx-x-D_2x100_P0.635mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 67.63, "y": 2.67}]
     },
     
-    "Samtec_BTE-020-xx-x-D_P0.8mm_Vertical": {
+    "Samtec_BTE-020-xx-x-D_2x20_P0.8mm_Vertical": {
         "library": "Connector_Samtec_BasicBladeAndBeam",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.2f}mm Basic Blade & Beam {type:s}; {pins:d} pins ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Basic Blade & Beam {type:s}; {pins:d} pins; generated with kicad-footprint-generator",
             "datasheet": "http://suddendocs.samtec.com/catalog_english/bte.pdf",
             "tags": "connector Samtec BTE mezzanine terminal vertical"
         },
@@ -264,71 +264,71 @@
             "signal": {"n": 40, "pitch": 0.8, "width": 0.305, "height": 1.45, "y": 3.086}
         }
     },
-    "Samtec_BTE-020-xx-x-D-A_P0.8mm_Vertical": {
-        "inherit": "Samtec_BTE-020-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BTE-020-xx-x-D-A_2x20_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-020-xx-x-D_2x20_P0.8mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 18.48, "y": -2.032}]
     },
-    "Samtec_BTE-040-xx-x-D_P0.8mm_Vertical": {
-        "inherit": "Samtec_BTE-020-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BTE-040-xx-x-D_2x40_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-020-xx-x-D_2x20_P0.8mm_Vertical",
         "layout": {"width": 36.0},
         "banks": {"width": 32.88},
         "pads": {"signal": {"n": 80}}
     },
-    "Samtec_BTE-040-xx-x-D-A_P0.8mm_Vertical": {
-        "inherit": "Samtec_BTE-040-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BTE-040-xx-x-D-A_2x40_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-040-xx-x-D_2x40_P0.8mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 34.48, "y": -2.032}]
     },
-    "Samtec_BTE-060-xx-x-D_P0.8mm_Vertical": {
-        "inherit": "Samtec_BTE-020-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BTE-060-xx-x-D_2x60_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-020-xx-x-D_2x20_P0.8mm_Vertical",
         "layout": {"width": 52.0},
         "banks": {"width": 48.88},
         "pads": {"signal": {"n": 120}}
     },
-    "Samtec_BTE-060-xx-x-D-A_P0.8mm_Vertical": {
-        "inherit": "Samtec_BTE-060-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BTE-060-xx-x-D-A_2x60_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-060-xx-x-D_2x60_P0.8mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 50.48, "y": -2.032}]
     },
-    "Samtec_BTE-080-xx-x-D_P0.8mm_Vertical": {
-        "inherit": "Samtec_BTE-020-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BTE-080-xx-x-D_2x80_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-020-xx-x-D_2x20_P0.8mm_Vertical",
         "layout": {"width": 68.0},
         "banks": {"width": 64.88},
         "pads": {"signal": {"n": 160}}
     },
-    "Samtec_BTE-080-xx-x-D-A_P0.8mm_Vertical": {
-        "inherit": "Samtec_BTE-080-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BTE-080-xx-x-D-A_2x80_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-080-xx-x-D_2x80_P0.8mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 66.48, "y": -2.032}]
     },
-    "Samtec_BTE-100-xx-x-D_P0.8mm_Vertical": {
-        "inherit": "Samtec_BTE-020-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BTE-100-xx-x-D_2x100_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-020-xx-x-D_2x20_P0.8mm_Vertical",
         "layout": {"width": 84.0},
         "banks": {"width": 80.88},
         "pads": {"signal": {"n": 200}}
     },
-    "Samtec_BTE-100-xx-x-D-A_P0.8mm_Vertical": {
-        "inherit": "Samtec_BTE-100-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BTE-100-xx-x-D-A_2x100_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-100-xx-x-D_2x100_P0.8mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 82.48, "y": -2.032}]
     },
-    "Samtec_BTE-120-xx-x-D_P0.8mm_Vertical": {
-        "inherit": "Samtec_BTE-020-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BTE-120-xx-x-D_2x120_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-020-xx-x-D_2x20_P0.8mm_Vertical",
         "layout": {"width": 100.0},
         "banks": {"width": 96.88},
         "pads": {"signal": {"n": 240}}
     },
-    "Samtec_BTE-120-xx-x-D-A_P0.8mm_Vertical": {
-        "inherit": "Samtec_BTE-120-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BTE-120-xx-x-D-A_2x120_P0.8mm_Vertical": {
+        "inherit": "Samtec_BTE-120-xx-x-D_2x120_P0.8mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 98.48, "y": -2.032}]
     },
     
-    "Samtec_BSE-020-xx-x-D_P0.8mm_Vertical": {
+    "Samtec_BSE-020-xx-x-D_2x20_P0.8mm_Vertical": {
         "library": "Connector_Samtec_BasicBladeAndBeam",
         "meta": {
-            "description": "Samtec {pn:s} {pitch:1.2f}mm Basic Blade & Beam {type:s}; {pins:d} pins ({ds:s}); generated with kicad-footprint-generator",
+            "description": "Samtec {pn:s} {pitch:1.2f}mm Basic Blade & Beam {type:s}; {pins:d} pins; generated with kicad-footprint-generator",
             "datasheet": "http://suddendocs.samtec.com/catalog_english/bse.pdf",
             "tags": "connector Samtec BSE mezzanine socket vertical"
         },
@@ -338,63 +338,63 @@
             "signal": {"n": 40, "pitch": 0.8, "width": 0.41, "height": 2.27, "y": 2.865}
         }
     },
-    "Samtec_BSE-020-xx-x-D-A_P0.8mm_Vertical": {
-        "inherit": "Samtec_BSE-020-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BSE-020-xx-x-D-A_2x20_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-020-xx-x-D_2x20_P0.8mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 20.13, "y": 2.67}]
     },
-    "Samtec_BSE-040-xx-x-D_P0.8mm_Vertical": {
-        "inherit": "Samtec_BSE-020-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BSE-040-xx-x-D_2x40_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-020-xx-x-D_2x20_P0.8mm_Vertical",
         "layout": {"width": 37.27},
         "banks": {"width": 32.64},
         "pads": {"signal": {"n": 80}}
     },
-    "Samtec_BSE-040-xx-x-D-A_P0.8mm_Vertical": {
-        "inherit": "Samtec_BSE-040-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BSE-040-xx-x-D-A_2x40_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-040-xx-x-D_2x40_P0.8mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 36.13, "y": 2.67}]
     },
-    "Samtec_BSE-060-xx-x-D_P0.8mm_Vertical": {
-        "inherit": "Samtec_BSE-020-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BSE-060-xx-x-D_2x60_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-020-xx-x-D_2x20_P0.8mm_Vertical",
         "layout": {"width": 53.27},
         "banks": {"width": 48.64},
         "pads": {"signal": {"n": 120}}
     },
-    "Samtec_BSE-060-xx-x-D-A_P0.8mm_Vertical": {
-        "inherit": "Samtec_BSE-060-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BSE-060-xx-x-D-A_2x60_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-060-xx-x-D_2x60_P0.8mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 52.13, "y": 2.67}]
     },
-    "Samtec_BSE-080-xx-x-D_P0.8mm_Vertical": {
-        "inherit": "Samtec_BSE-020-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BSE-080-xx-x-D_2x80_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-020-xx-x-D_2x20_P0.8mm_Vertical",
         "layout": {"width": 69.27},
         "banks": {"width": 64.64},
         "pads": {"signal": {"n": 160}}
     },
-    "Samtec_BSE-080-xx-x-D-A_P0.8mm_Vertical": {
-        "inherit": "Samtec_BSE-080-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BSE-080-xx-x-D-A_2x80_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-080-xx-x-D_2x80_P0.8mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 68.13, "y": 2.67}]
     },
-    "Samtec_BSE-100-xx-x-D_P0.8mm_Vertical": {
-        "inherit": "Samtec_BSE-020-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BSE-100-xx-x-D_2x100_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-020-xx-x-D_2x20_P0.8mm_Vertical",
         "layout": {"width": 85.27},
         "banks": {"width": 80.64},
         "pads": {"signal": {"n": 200}}
     },
-    "Samtec_BSE-100-xx-x-D-A_P0.8mm_Vertical": {
-        "inherit": "Samtec_BSE-100-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BSE-100-xx-x-D-A_2x100_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-100-xx-x-D_2x100_P0.8mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 84.13, "y": 2.67}]
     },
-    "Samtec_BSE-120-xx-x-D_P0.8mm_Vertical": {
-        "inherit": "Samtec_BSE-020-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BSE-120-xx-x-D_2x120_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-020-xx-x-D_2x20_P0.8mm_Vertical",
         "layout": {"width": 101.27},
         "banks": {"width": 96.64},
         "pads": {"signal": {"n": 240}}
     },
-    "Samtec_BSE-120-xx-x-D-A_P0.8mm_Vertical": {
-        "inherit": "Samtec_BSE-120-xx-x-D_P0.8mm_Vertical",
+    "Samtec_BSE-120-xx-x-D-A_2x120_P0.8mm_Vertical": {
+        "inherit": "Samtec_BSE-120-xx-x-D_2x120_P0.8mm_Vertical",
         "add-tags": "alignment-pins",
         "holes": [{"drill": 1.0, "space": 100.13, "y": 2.67}]
     }
diff --git a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json
index 67d2936c3..a0ee90ba5 100644
--- a/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json
+++ b/scripts/Connector/Connector_Samtec/RazorBeam_Vertical.json
@@ -1,5 +1,5 @@
 {
-    "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical": {
+    "Samtec_LSHM-105-xx.x-x-DV-A-N_2x05_P0.5mm_Vertical": {
         "library": "Connector_Samtec_RazorBeam",
         "meta": {
             "description": "Samtec {pn:s} {pitch:1.2f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip",
@@ -10,74 +10,74 @@
         "pads": {"n": 10, "pitch": 0.5, "y": 1.85, "width": 0.3, "height": 1.5},
         "holes": [{"drill": 1.45, "space": 4.5, "y": -0.85}]
     },
-    "Samtec_LSHM-105-xx.x-x-DV-A-S_P0.5mm_Vertical": {
-        "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical",
+    "Samtec_LSHM-105-xx.x-x-DV-A-S_2x05-1SH_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_2x05_P0.5mm_Vertical",
         "meta": {"+tags": " shield"},
         "layout": {"+width": 1.1},
         "+holes": [{"drill": 1.0, "pad": 1.5, "space": 7.45, "y": 1.15, "name": "SH"}]
     },
-    "Samtec_LSHM-110-xx.x-x-DV-A-N_P0.5mm_Vertical": {
-        "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical",
+    "Samtec_LSHM-110-xx.x-x-DV-A-N_2x10_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_2x05_P0.5mm_Vertical",
         "layout": {"width": 9.70},
         "pads": {"n": 20},
         "holes": [{"drill": 1.45, "space": 7.0, "y": -0.85}]
     },
-    "Samtec_LSHM-110-xx.x-x-DV-A-S_P0.5mm_Vertical": {
-        "inherit": "Samtec_LSHM-110-xx.x-x-DV-A-N_P0.5mm_Vertical",
+    "Samtec_LSHM-110-xx.x-x-DV-A-S_2x10-1SH_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-110-xx.x-x-DV-A-N_2x10_P0.5mm_Vertical",
         "meta": {"+tags": " shield"},
         "layout": {"+width": 1.1},
         "+holes": [{"drill": 1.0, "pad": 1.5, "space": 9.95, "y": 1.15, "name": "SH"}]
     },
-    "Samtec_LSHM-120-xx.x-x-DV-A-N_P0.5mm_Vertical": {
-        "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical",
+    "Samtec_LSHM-120-xx.x-x-DV-A-N_2x20_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_2x05_P0.5mm_Vertical",
         "layout": {"width": 14.70},
         "pads": {"n": 40},
         "holes": [{"drill": 1.45, "space": 12.0, "y": -0.85}]
     },
-    "Samtec_LSHM-120-xx.x-x-DV-A-S_P0.5mm_Vertical": {
-        "inherit": "Samtec_LSHM-120-xx.x-x-DV-A-N_P0.5mm_Vertical",
+    "Samtec_LSHM-120-xx.x-x-DV-A-S_2x20-1SH_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-120-xx.x-x-DV-A-N_2x20_P0.5mm_Vertical",
         "meta": {"+tags": " shield"},
         "layout": {"+width": 1.1},
         "+holes": [{"drill": 1.0, "pad": 1.5, "space": 14.95, "y": 1.15, "name": "SH"}]
     },
-    "Samtec_LSHM-130-xx.x-x-DV-A-N_P0.5mm_Vertical": {
-        "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical",
+    "Samtec_LSHM-130-xx.x-x-DV-A-N_2x30_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_2x05_P0.5mm_Vertical",
         "layout": {"width": 19.70},
         "pads": {"n": 60},
         "holes": [{"drill": 1.45, "space": 17.0, "y": -0.85}]
     },
-    "Samtec_LSHM-130-xx.x-x-DV-A-S_P0.5mm_Vertical": {
-        "inherit": "Samtec_LSHM-130-xx.x-x-DV-A-N_P0.5mm_Vertical",
+    "Samtec_LSHM-130-xx.x-x-DV-A-S_2x30-1SH_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-130-xx.x-x-DV-A-N_2x30_P0.5mm_Vertical",
         "meta": {"+tags": " shield"},
         "layout": {"+width": 1.1},
         "+holes": [{"drill": 1.0, "pad": 1.5, "space": 19.95, "y": 1.15, "name": "SH"}]
     },
-    "Samtec_LSHM-140-xx.x-x-DV-A-N_P0.5mm_Vertical": {
-        "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical",
+    "Samtec_LSHM-140-xx.x-x-DV-A-N_2x40_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_2x05_P0.5mm_Vertical",
         "layout": {"width": 24.70},
         "pads": {"n": 80},
         "holes": [{"drill": 1.45, "space": 22.0, "y": -0.85}]
     },
-    "Samtec_LSHM-140-xx.x-x-DV-A-S_P0.5mm_Vertical": {
-        "inherit": "Samtec_LSHM-140-xx.x-x-DV-A-N_P0.5mm_Vertical",
+    "Samtec_LSHM-140-xx.x-x-DV-A-S_2x40-1SH_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-140-xx.x-x-DV-A-N_2x40_P0.5mm_Vertical",
         "meta": {"+tags": " shield"},
         "layout": {"+width": 1.1},
         "+holes": [{"drill": 1.0, "pad": 1.5, "space": 24.95, "y": 1.15, "name": "SH"}]
     },
-    "Samtec_LSHM-150-xx.x-x-DV-A-N_P0.5mm_Vertical": {
-        "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_P0.5mm_Vertical",
+    "Samtec_LSHM-150-xx.x-x-DV-A-N_2x50_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-105-xx.x-x-DV-A-N_2x05_P0.5mm_Vertical",
         "layout": {"width": 29.70},
         "pads": {"n": 100},
         "holes": [{"drill": 1.45, "space": 27.0, "y": -0.85}]
     },
-    "Samtec_LSHM-150-xx.x-x-DV-A-S_P0.5mm_Vertical": {
-        "inherit": "Samtec_LSHM-150-xx.x-x-DV-A-N_P0.5mm_Vertical",
+    "Samtec_LSHM-150-xx.x-x-DV-A-S_2x50-1SH_P0.5mm_Vertical": {
+        "inherit": "Samtec_LSHM-150-xx.x-x-DV-A-N_2x50_P0.5mm_Vertical",
         "meta": {"+tags": " shield"},
         "layout": {"+width": 1.1},
         "+holes": [{"drill": 1.0, "pad": 1.5, "space": 29.95, "y": 1.15, "name": "SH"}]
     },
 
-    "Samtec_LSS-105-xx-x-DV-A_P0.635mm_Vertical": {
+    "Samtec_LSS-105-xx-x-DV-A_2x05_P0.635mm_Vertical": {
         "library": "Connector_Samtec_RazorBeam",
         "meta": {
             "description": "Samtec {pn:s} {pitch:1.3f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip, ",
@@ -88,38 +88,38 @@
         "pads": {"n": 10, "pitch": 0.635, "y": 1.8, "width": 0.4, "height": 1.6},
         "holes": [{"drill": 0.89, "space": 4.675, "y": 1.1}]
     },
-    "Samtec_LSS-110-xx-x-DV-A_P0.635mm_Vertical": {
-        "inherit": "Samtec_LSS-105-xx-x-DV-A_P0.635mm_Vertical",
+    "Samtec_LSS-110-xx-x-DV-A_2x10_P0.635mm_Vertical": {
+        "inherit": "Samtec_LSS-105-xx-x-DV-A_2x05_P0.635mm_Vertical",
         "layout": {"width": 11.10},
         "pads": {"n": 20},
         "holes": [{"drill": 0.89, "space": 7.85, "y": 1.1}]
     },
-    "Samtec_LSS-120-xx-x-DV-A_P0.635mm_Vertical": {
-        "inherit": "Samtec_LSS-110-xx-x-DV-A_P0.635mm_Vertical",
+    "Samtec_LSS-120-xx-x-DV-A_2x20_P0.635mm_Vertical": {
+        "inherit": "Samtec_LSS-105-xx-x-DV-A_2x05_P0.635mm_Vertical",
         "layout": {"width": 17.45},
         "pads": {"n": 40},
         "holes": [{"drill": 0.89, "space": 14.20, "y": 1.1}]
     },
-    "Samtec_LSS-130-xx-x-DV-A_P0.635mm_Vertical": {
-        "inherit": "Samtec_LSS-110-xx-x-DV-A_P0.635mm_Vertical",
+    "Samtec_LSS-130-xx-x-DV-A_2x30_P0.635mm_Vertical": {
+        "inherit": "Samtec_LSS-105-xx-x-DV-A_2x05_P0.635mm_Vertical",
         "layout": {"width": 23.8},
         "pads": {"n": 60},
         "holes": [{"drill": 0.89, "space": 20.55, "y": 1.1}]
     },
-    "Samtec_LSS-140-xx-x-DV-A_P0.635mm_Vertical": {
-        "inherit": "Samtec_LSS-110-xx-x-DV-A_P0.635mm_Vertical",
+    "Samtec_LSS-140-xx-x-DV-A_2x40_P0.635mm_Vertical": {
+        "inherit": "Samtec_LSS-105-xx-x-DV-A_2x05_P0.635mm_Vertical",
         "layout": {"width": 30.15},
         "pads": {"n": 80},
         "holes": [{"drill": 0.89, "space": 26.90, "y": 1.1}]
     },
-    "Samtec_LSS-150-xx-x-DV-A_P0.635mm_Vertical": {
-        "inherit": "Samtec_LSS-110-xx-x-DV-A_P0.635mm_Vertical",
+    "Samtec_LSS-150-xx-x-DV-A_2x50_P0.635mm_Vertical": {
+        "inherit": "Samtec_LSS-105-xx-x-DV-A_2x05_P0.635mm_Vertical",
         "layout": {"width": 36.5},
         "pads": {"n": 100},
         "holes": [{"drill": 0.89, "space": 33.25, "y": 1.1}]
     },
 
-    "Samtec_LSEM-120-xx.x-x-DV-A-N_P0.8mm_Vertical": {
+    "Samtec_LSEM-120-xx.x-x-DV-A-N_2x20_P0.8mm_Vertical": {
         "library": "Connector_Samtec_RazorBeam",
         "meta": {
             "description": "Samtec {pn:s} {pitch:1.2f}mm Razor Beam High-Speed Hermaphroditic Terminal/Socket Strip",
@@ -130,20 +130,20 @@
         "pads": {"n": 40, "pitch": 0.8, "y": 1.85, "width": 0.38, "height": 1.5},
         "holes": [{"drill": 1.5, "space": 17.7, "y": -0.95}]
     },
-    "Samtec_LSEM-130-xx.x-x-DV-A-N_P0.8mm_Vertical": {
-        "inherit": "Samtec_LSEM-120-xx.x-x-DV-A-N_P0.8mm_Vertical",
+    "Samtec_LSEM-130-xx.x-x-DV-A-N_2x30_P0.8mm_Vertical": {
+        "inherit": "Samtec_LSEM-120-xx.x-x-DV-A-N_2x20_P0.8mm_Vertical",
         "layout": {"width": 28.4},
         "pads": {"n": 60},
         "holes": [{"drill": 1.5, "space": 25.7, "y": -1.1}]
     },
-    "Samtec_LSEM-140-xx.x-x-DV-A-N_P0.8mm_Vertical": {
-        "inherit": "Samtec_LSEM-120-xx.x-x-DV-A-N_P0.8mm_Vertical",
+    "Samtec_LSEM-140-xx.x-x-DV-A-N_2x40_P0.8mm_Vertical": {
+        "inherit": "Samtec_LSEM-120-xx.x-x-DV-A-N_2x20_P0.8mm_Vertical",
         "layout": {"width": 36.4},
         "pads": {"n": 80},
         "holes": [{"drill": 1.5, "space": 33.7, "y": -1.1}]
     },
-    "Samtec_LSEM-150-xx.x-x-DV-A-N_P0.8mm_Vertical": {
-        "inherit": "Samtec_LSEM-120-xx.x-x-DV-A-N_P0.8mm_Vertical",
+    "Samtec_LSEM-150-xx.x-x-DV-A-N_2x50_P0.8mm_Vertical": {
+        "inherit": "Samtec_LSEM-120-xx.x-x-DV-A-N_2x20_P0.8mm_Vertical",
         "layout": {"width": 44.4},
         "pads": {"n": 100},
         "holes": [{"drill": 1.5, "space": 41.7, "y": -1.1}]
diff --git a/scripts/Connector/Connector_Samtec/mPOWER_Vertical.json b/scripts/Connector/Connector_Samtec/mPOWER_Vertical.json
index da2810a6b..dcbfad513 100644
--- a/scripts/Connector/Connector_Samtec/mPOWER_Vertical.json
+++ b/scripts/Connector/Connector_Samtec/mPOWER_Vertical.json
@@ -1,5 +1,5 @@
 {
-    "Samtec_UMPT-02-xx.x-x-VT-SM_P2.0mm_Vertical": {
+    "Samtec_UMPT-02-xx.x-x-VT-SM_2x02_P2.0mm_Vertical": {
         "library": "Connector_Samtec",
         "meta": {
             "description": "Samtec {pn:s} {pitch:1.2f}mm Ultra Micro Power Terminal",
@@ -9,8 +9,8 @@
         "layout": {"type": "Terminal", "width": [11.3], "height": 7.6},
         "pads": {"n": 2, "pitch": 2.0, "width": 1.25, "height": 3.5}
     },
-    "Samtec_UMPT-02-xx.x-x-VT-SM-WT_P2.0mm_Vertical": {
-        "inherit": "Samtec_UMPT-02-xx.x-x-VT-SM_P2.0mm_Vertical",
+    "Samtec_UMPT-02-xx.x-x-VT-SM-WT_2x02-1MP_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPT-02-xx.x-x-VT-SM_2x02_P2.0mm_Vertical",
         "meta": {"+tags": " weld-tab"},
         "holes": [
             {"drill": 0.8, "pad": 1.3, "x":  4.85, "y":  0.3, "name": "MP"},
@@ -19,13 +19,13 @@
             {"drill": 0.8, "pad": 1.3, "x": -4.85, "y": -1.2, "name": "MP"}
         ]
     },
-    "Samtec_UMPT-03-xx.x-x-VT-SM_P2.0mm_Vertical": {
-        "inherit": "Samtec_UMPT-02-xx.x-x-VT-SM_P2.0mm_Vertical",
+    "Samtec_UMPT-03-xx.x-x-VT-SM_2x03_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPT-02-xx.x-x-VT-SM_2x02_P2.0mm_Vertical",
         "layout": {"width": [13.3]},
         "pads": {"n": 3}
     },
-    "Samtec_UMPT-03-xx.x-x-VT-SM-WT_P2.0mm_Vertical": {
-        "inherit": "Samtec_UMPT-03-xx.x-x-VT-SM_P2.0mm_Vertical",
+    "Samtec_UMPT-03-xx.x-x-VT-SM-WT_2x03-1MP_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPT-03-xx.x-x-VT-SM_2x03_P2.0mm_Vertical",
         "meta": {"+tags": " weld-tab"},
         "holes": [
             {"drill": 0.8, "pad": 1.3, "x":  5.85, "y":  0.3, "name": "MP"},
@@ -34,13 +34,13 @@
             {"drill": 0.8, "pad": 1.3, "x": -5.85, "y": -1.2, "name": "MP"}
         ]
     },
-    "Samtec_UMPT-04-xx.x-x-VT-SM_P2.0mm_Vertical": {
-        "inherit": "Samtec_UMPT-02-xx.x-x-VT-SM_P2.0mm_Vertical",
+    "Samtec_UMPT-04-xx.x-x-VT-SM_2x04_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPT-02-xx.x-x-VT-SM_2x02_P2.0mm_Vertical",
         "layout": {"width": [15.3]},
         "pads": {"n": 4}
     },
-    "Samtec_UMPT-04-xx.x-x-VT-SM-WT_P2.0mm_Vertical": {
-        "inherit": "Samtec_UMPT-04-xx.x-x-VT-SM_P2.0mm_Vertical",
+    "Samtec_UMPT-04-xx.x-x-VT-SM-WT_2x04-1MP_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPT-04-xx.x-x-VT-SM_2x04_P2.0mm_Vertical",
         "meta": {"+tags": " weld-tab"},
         "holes": [
             {"drill": 0.8, "pad": 1.3, "x":  6.85, "y":  0.3, "name": "MP"},
@@ -49,13 +49,13 @@
             {"drill": 0.8, "pad": 1.3, "x": -6.85, "y": -1.2, "name": "MP"}
         ]
     },
-    "Samtec_UMPT-05-xx.x-x-VT-SM_P2.0mm_Vertical": {
-        "inherit": "Samtec_UMPT-02-xx.x-x-VT-SM_P2.0mm_Vertical",
+    "Samtec_UMPT-05-xx.x-x-VT-SM_2x05_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPT-02-xx.x-x-VT-SM_2x02_P2.0mm_Vertical",
         "layout": {"width": [17.3]},
         "pads": {"n": 5}
     },
-    "Samtec_UMPT-05-xx.x-x-VT-SM-WT_P2.0mm_Vertical": {
-        "inherit": "Samtec_UMPT-05-xx.x-x-VT-SM_P2.0mm_Vertical",
+    "Samtec_UMPT-05-xx.x-x-VT-SM-WT_2x05-1MP_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPT-05-xx.x-x-VT-SM_2x05_P2.0mm_Vertical",
         "meta": {"+tags": " weld-tab"},
         "holes": [
             {"drill": 0.8, "pad": 1.3, "x":  7.85, "y":  0.3, "name": "MP"},
@@ -65,7 +65,7 @@
         ]
     },
 
-    "Samtec_UMPS-02-xx.x-x-VT-SM_P2.0mm_Vertical": {
+    "Samtec_UMPS-02-xx.x-x-VT-SM_2x02_P2.0mm_Vertical": {
         "library": "Connector_Samtec",
         "meta": {
             "description": "Samtec {pn:s} {pitch:1.2f}mm Ultra Micro Power Socket",
@@ -75,8 +75,8 @@
         "layout": {"type": "Socket", "width": [9.05, 7.65], "height": 6.2},
         "pads": {"n": 2, "pitch": 2.0, "width": 1.30, "height": 3.5}
     },
-    "Samtec_UMPS-02-xx.x-x-VT-SM-WT_P2.0mm_Vertical": {
-        "inherit": "Samtec_UMPS-02-xx.x-x-VT-SM_P2.0mm_Vertical",
+    "Samtec_UMPS-02-xx.x-x-VT-SM-WT_2x02-1MP_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPS-02-xx.x-x-VT-SM_2x02_P2.0mm_Vertical",
         "meta": {"+tags": " weld-tab"},
         "holes": [
             {"drill": 0.8, "pad": 1.3, "x": -3.0, "y":  0.5, "name": "MP"},
@@ -85,13 +85,13 @@
             {"drill": 0.8, "pad": 1.3, "x":  3.0, "y": -1.0, "name": "MP"}
         ]
     },
-    "Samtec_UMPS-03-xx.x-x-VT-SM_P2.0mm_Vertical": {
-        "inherit": "Samtec_UMPS-02-xx.x-x-VT-SM_P2.0mm_Vertical",
+    "Samtec_UMPS-03-xx.x-x-VT-SM_2x03_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPS-02-xx.x-x-VT-SM_2x02_P2.0mm_Vertical",
         "layout": {"width": [11.05, 9.65]},
         "pads": {"n": 3}
     },
-    "Samtec_UMPS-03-xx.x-x-VT-SM-WT_P2.0mm_Vertical": {
-        "inherit": "Samtec_UMPS-03-xx.x-x-VT-SM_P2.0mm_Vertical",
+    "Samtec_UMPS-03-xx.x-x-VT-SM-WT_2x03-1MP_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPS-03-xx.x-x-VT-SM_2x03_P2.0mm_Vertical",
         "meta": {"+tags": " weld-tab"},
         "holes": [
             {"drill": 0.8, "pad": 1.3, "x": -4.0, "y":  0.5, "name": "MP"},
@@ -100,13 +100,13 @@
             {"drill": 0.8, "pad": 1.3, "x":  4.0, "y": -1.0, "name": "MP"}
         ]
     },
-    "Samtec_UMPS-04-xx.x-x-VT-SM_P2.0mm_Vertical": {
-        "inherit": "Samtec_UMPS-02-xx.x-x-VT-SM_P2.0mm_Vertical",
+    "Samtec_UMPS-04-xx.x-x-VT-SM_2x04_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPS-02-xx.x-x-VT-SM_2x02_P2.0mm_Vertical",
         "layout": {"width": [13.05, 11.65]},
         "pads": {"n": 4}
     },
-    "Samtec_UMPS-04-xx.x-x-VT-SM-WT_P2.0mm_Vertical": {
-        "inherit": "Samtec_UMPS-04-xx.x-x-VT-SM_P2.0mm_Vertical",
+    "Samtec_UMPS-04-xx.x-x-VT-SM-WT_2x04-1MP_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPS-04-xx.x-x-VT-SM_2x04_P2.0mm_Vertical",
         "meta": {"+tags": " weld-tab"},
         "holes": [
             {"drill": 0.8, "pad": 1.3, "x": -5.0, "y":  0.5, "name": "MP"},
@@ -115,13 +115,13 @@
             {"drill": 0.8, "pad": 1.3, "x":  5.0, "y": -1.0, "name": "MP"}
         ]
     },
-    "Samtec_UMPS-05-xx.x-x-VT-SM_P2.0mm_Vertical": {
-        "inherit": "Samtec_UMPS-02-xx.x-x-VT-SM_P2.0mm_Vertical",
+    "Samtec_UMPS-05-xx.x-x-VT-SM_2x05_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPS-02-xx.x-x-VT-SM_2x02_P2.0mm_Vertical",
         "layout": {"width": [15.05, 13.65]},
         "pads": {"n": 5}
     },
-    "Samtec_UMPS-05-xx.x-x-VT-SM-WT_P2.0mm_Vertical": {
-        "inherit": "Samtec_UMPS-05-xx.x-x-VT-SM_P2.0mm_Vertical",
+    "Samtec_UMPS-05-xx.x-x-VT-SM-WT_2x05-1MP_P2.0mm_Vertical": {
+        "inherit": "Samtec_UMPS-05-xx.x-x-VT-SM_2x05_P2.0mm_Vertical",
         "meta": {"+tags": " weld-tab"},
         "holes": [
             {"drill": 0.8, "pad": 1.3, "x": -6.0, "y":  0.5, "name": "MP"},

From 2b7bd67fc16e893406a441c3c1c610012417b7ac Mon Sep 17 00:00:00 2001
From: Caleb Reister <calebreister@gmail.com>
Date: Fri, 2 Oct 2020 08:30:54 -0700
Subject: [PATCH 61/62] Remove outdated QStrip_Horizontal script and YAML file

---
 .../Connector_Samtec/QStrip_Horizontal.py     | 418 ------------------
 .../Connector_Samtec/QStrip_Horizontal.yaml   |  39 --
 .../Connector_Samtec/QStrip_Vertical.py       |   4 +-
 3 files changed, 2 insertions(+), 459 deletions(-)
 delete mode 100755 scripts/Connector/Connector_Samtec/QStrip_Horizontal.py
 delete mode 100644 scripts/Connector/Connector_Samtec/QStrip_Horizontal.yaml

diff --git a/scripts/Connector/Connector_Samtec/QStrip_Horizontal.py b/scripts/Connector/Connector_Samtec/QStrip_Horizontal.py
deleted file mode 100755
index e67554642..000000000
--- a/scripts/Connector/Connector_Samtec/QStrip_Horizontal.py
+++ /dev/null
@@ -1,418 +0,0 @@
-#!/usr/bin/python
-
-# This file is part of kicad-footprint-generator.
-# 
-# kicad-footprint-generator is free software: you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or (at your
-# option) any later version.
-# 
-# kicad-footprint-generator is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-# more details. You should have received a copy of the GNU General Public
-# License along with kicad-footprint-generator. If not, see
-# <http://www.gnu.org/licenses/>.
-# 
-# Copyright (C) 2019 by Caleb Reister <calebreister@gmail.com>
-#
-
-"""
-YAML footprint specification
----
-Footprint_Name:
-  library: 'library name' # [optional] KiCad library to use, overrides default
-  meta: # Footprint metadata
-    pn: 'part number' # [optional] overrides automatic part number detection
-    description: 'Brief description of the footprint'
-    tags: 'KiCad tags go here'
-    datasheet: 'URL(s) to footprint datasheet'
-  add-tags: 'more tags' # [optional] extends the tag list
-  layout: # General footprint layout/drawing data
-    type: '(Terminal|Socket)' # sets Pin 1 position and drawing mode
-    width: !!float mm # [cosmetic] overall width of the connector
-    height: !!float mm # [cosmetic] overall height of the connector
-    y: !!float mm # [cosmetic] y-offset used to draw connector outline
-    edge: !!float mm # y-offset of PCB edge
-  banks:
-    n: !!uint # number of banks in the connector
-    diff: !!uint # number of differential banks
-    space: !!float mm # distance between adjacent banks
-    width: !!float mm # width of bank outline drawn on F.Fab
-    height: !!float mm # height of bank outline drawn on F.Fab
-  pads:
-    signal: # signal pin parameters
-      n: !!uint # Number of pin slots on a bank
-      rows: !!uint # Number of pin rows
-      pitch: !!float mm
-      width: !!float mm # Pad width
-      height: !!float mm # Pad height
-      y: [!!float mm, ...] # y-offset for each pin row
-    plane: # plane parameters
-      n: !!uint # Number of holes for plane connection
-      pitch: !!float mm
-      y: !!float mm # y-offset of plane holes
-      drill: !!float mm # drill diameter
-      pad: !!float mm # pad diameter
-  holes: # [optional] hole pair specifications, mirrored about y axis
-    - # Hole spec. 1
-      name: "" # [optional] name/number for plated holes
-      n: !!uint # number of holes to drill
-      drill: !!float mm # drill diameter (a list produces an oval)
-      pad: !!float mm # [optional] PTH pad diameter (a list produces an oval)
-      space: !!float mm # distance between holes mirrored about the y-axis
-      y: !!float mm # vertical offset
-    - # Hole spec. 2...
-...
-"""
-
-import sys
-import os
-import argparse
-from copy import deepcopy
-from math import *
-import yaml
-
-# Load parent path of KicadModTree
-sys.path.append(os.path.join(sys.path[0], "..", "..", ".."))
-sys.path.append(os.path.join(sys.path[0], "..", "..", "tools"))
-
-from KicadModTree import *
-from footprint_text_fields import addTextFields
-from helpers import *
-
-def generate_one_footprint(param, config, default_lib):
-    fp = Footprint(param['name'])
-    
-    # Terminal or Socket mode
-    mode = param['layout']['type'].capitalize()
-    
-    # Bank parameters
-    banks  = param['banks']['n']
-    bank_x = param['banks']['space']
-    bank_w = param['banks']['width']
-    bank_h = param['banks']['height']
-
-    ############################################################################
-    # Copper layer(s)
-    
-    # Signal pad parameters
-    pad_pitch = param['pads']['signal']['pitch']
-    pad_rows = param['pads']['signal']['rows']
-    pad_w = param['pads']['signal']['width']
-    pad_h = param['pads']['signal']['height']
-    pad_y = param['pads']['signal']['y']
-    pad_n = param['pads']['signal']['n']
-
-    # Plane parameters
-    plane_pitch = param['pads']['plane']['pitch']
-    plane_d = param['pads']['plane']['drill']
-    plane_p = param['pads']['plane']['pad']
-    plane_y = param['pads']['plane']['y']
-    plane_n = param['pads']['plane']['n']
-
-    # Terminal or Socket mode
-    mode = param['layout']['type'].capitalize()
-    if mode == "Terminal":
-        x_inv = 1
-    elif mode == "Socket":
-        x_inv = -1
-    else:
-        raise ValueError("Connector type must be either 'Terminal' or 'Socket'")
-    
-    # Pin 1 position
-    pin1 = Vector2D(0,0)
-    pin1.x = -(pad_n/4)*pad_pitch + pad_pitch/2 - ((banks-1) / 2)*bank_x
-    pin1.y = pad_y[0]
-    
-    # Bank 1 center point
-    bank1_mid = pin1.x - pad_pitch/2 + (pad_n / 4)*pad_pitch
-
-    # Place signal pads
-    n = 1 # Pin counter
-    pin = [] # Pin position list, organized by bank
-    for b in range(banks):
-        pin.append([])
-        for slot in range(pad_n):
-            # Compute next pad location
-            for r in range(pad_rows):
-                pos = {'x': pin1.x + (slot // pad_rows)*pad_pitch + b*bank_x,
-                       'y': pad_y[slot % 2],
-                       'n': n+1, 'slot': slot}
-
-            # Skip slots for differential banks
-            if b < param['banks']['diff']:
-                if ((slot+1) % 6 == 0 or # Skip every 3rd odd slot
-                    (slot+2) % 6 == 0 or # Skip every 3rd even slot
-                    # Only add end-of-bank pins if they are completing a pair
-                    (slot+2 >= pad_n and
-                     pin[b][-2]['slot'] != slot-2)):
-                    continue
-
-            # Create pad
-            pin[b].append(pos) # Add position to list
-            # Create pad (both single-ended and differential)
-            pad = Pad(number = str(n),
-                      at = pos,
-                      size = (pad_w, pad_h),
-                      type = Pad.TYPE_SMT,
-                      layers = Pad.LAYERS_SMT,
-                      shape = Pad.SHAPE_RECT)
-            fp.append(pad)
-            n += 1
-        
-        mid = bank1_mid + b*bank_x # Bank midpoint
-        for h in range(plane_n):
-            hole = Pad(number = "P" + str(b+1),
-                       at     = ((h - (plane_n-1)/2)*plane_pitch + mid, plane_y),
-                       drill  = plane_d,
-                       size   = plane_p,
-                       type   = Pad.TYPE_THT,
-                       layers = Pad.LAYERS_THT,
-                       shape  = Pad.SHAPE_CIRCLE)
-            fp.append(hole)
-    
-    ############################################################################
-    # Holes
-    if 'holes' in param:
-        for hole in param['holes']:
-            drill = hole['drill']
-            shape = Pad.SHAPE_CIRCLE if type(drill) is float else Pad.SHAPE_OVAL
-            holes = [Pad(number = "MP" if 'pad' in hole else "",
-                         at     = ((h/(hole['n']-1) - 1/2)*hole['space'], hole['y']),
-                         drill  = drill,
-                         size   = hole['pad'] if 'pad' in hole else drill,
-                         type   = Pad.TYPE_THT if 'pad' in hole else Pad.TYPE_NPTH,
-                         layers = Pad.LAYERS_THT if 'pad' in hole else Pad.LAYERS_NPTH,
-                         shape  = shape) for h in range(hole['n'])]
-            fp.extend(holes)
-
-    ############################################################################
-    # Fabrication layer: F.Fab
-    fab_line = config['fab_line_width']
-    fab_mark = config['fab_pin1_marker_length']
-    fab_w = param['layout']['width'] if 'width' not in param else param['width']
-    fab_h = param['layout']['height']
-    fab_y = param['layout']['y']
-    fab_edge = fab_w/2
-
-    if param['layout']['type'] == "Terminal":
-        # Draw left and right outlines
-        # Angle measured from 3D model of QTH-060-01-L-D-RA
-        fab_end = [[banks*bank_x/2, pin1.y],
-                   [banks*bank_x/2 + (fab_y-fab_h-pin1.y)/tan(-1.112), fab_y-fab_h],
-                   [fab_w/2, fab_y-fab_h],
-                   [fab_w/2, fab_y],
-                   [banks*bank_x/2, fab_y]]
-        fp.append(PolygoneLine(nodes = fab_end,
-                               layer = "F.Fab",
-                               width = fab_line))
-        fp.append(PolygoneLine(nodes = fab_end,
-                               layer = "F.Fab",
-                               width = fab_line,
-                               x_mirror = 0))
-        fp.append(Line(start = (-banks*bank_x/2, pin1.y),
-                       end   = ( banks*bank_x/2, pin1.y),
-                       layer = "F.Fab",
-                       width = fab_line))
-        # Terminal outline
-        fp.append(RectLine(start  = (-banks*bank_x/2, fab_y),
-                           end    = ( banks*bank_x/2, fab_y + bank_h),
-                           layer  = "F.Fab",
-                           width  = fab_line))
-
-    ############################################################################
-    # Silkscreen: F.SilkS
-    silk_offset = config['silk_fab_offset']
-    silk_pad = {'x': config['silk_pad_clearance'] + pad_w/2,
-                'y': config['silk_pad_clearance'] + pad_h/2}
-    silk_line = config['silk_line_width']
-    silk_pad = {'x': config['silk_pad_clearance'] + pad_w/2,
-                'y': config['silk_pad_clearance'] + pad_h/2}
-
-    # Draw silkscreen end outlines
-    silk_end = fab_end.copy()
-    silk_end.pop()
-    silk_end_offset = [(-silk_offset, -silk_offset),
-                       (-silk_offset, -silk_offset),
-                       ( silk_offset, -silk_offset),
-                       ( silk_offset,  0)]
-    for a in range(len(silk_end)):
-        for b in range(2):
-            silk_end[a][b] += silk_end_offset[a][b]
-    
-    fp.append(PolygoneLine(nodes = silk_end,
-                           layer = "F.SilkS",
-                           width = silk_line))
-    fp.append(PolygoneLine(nodes = silk_end,
-                           layer = "F.SilkS",
-                           width = silk_line,
-                           x_mirror = 0))
-
-    # Extend end outlines to pins
-    fp.append(Line(start = (-banks*bank_x/2+silk_offset, pin1.y-silk_offset),
-                   end   = (pin[0][0]['x']-silk_pad['x'], pin1.y-silk_offset),
-                   layer = "F.SilkS",
-                   width = silk_line))
-    fp.append(Line(start = (banks*bank_x/2-silk_offset, pin1.y-silk_offset),
-                   end   = (pin[-1][-1]['x']+silk_pad['x'], pin1.y-silk_offset),
-                   layer = "F.SilkS",
-                   width = silk_line))
-
-    # Pin 1 indicator
-    fp.append(markerArrow(x = pin[0][0]['x'],
-                          y = pin[0][0]['y'] - silk_pad['y'],
-                          width = fab_mark / 2,
-                          line_width = silk_line,
-                          angle = 180,
-                          layer = "F.SilkS"))
-
-    # Draw outlines between banks
-    for b in range(banks-1):
-        fp.append(Line(start = (pin[b][-1]['x']  + x_inv*silk_pad['x'], pin1.y-silk_offset),
-                       end   = (pin[b+1][0]['x'] - x_inv*silk_pad['x'], pin1.y-silk_offset),
-                       layer = "F.SilkS",
-                       width = silk_line))
-    
-    ############################################################################
-    # PCB Edge: Dwgs.User
-    fp.append(Line(start = (-fab_edge, fab_y + param['layout']['edge']),
-                   end   = ( fab_edge, fab_y + param['layout']['edge']),
-                   layer = "Dwgs.User",
-                   width = fab_line))
-    
-    fp.append(Text(type = "user", text = "PCB Edge",
-                   at = (0, fab_y + param['layout']['edge'] + 1.0),
-                   layer = "Dwgs.User"))
-
-    ############################################################################
-    # Courtyard: F.CrtYd
-    court_line = config['courtyard_line_width']
-    court_grid = config['courtyard_grid']
-    court_offset = config['courtyard_offset']['connector']
-    
-    court = {'x': roundToBase(fab_w/2 + court_offset, court_grid),
-             'y': [roundToBase(fab_y -  fab_h - court_offset, court_grid),
-                   roundToBase(fab_y + bank_h + court_offset, court_grid)]}
-    
-    fp.append(RectLine(start  = (-court['x'], court['y'][0]),
-                       end    = ( court['x'], court['y'][1]),
-                       layer  = "F.CrtYd",
-                       width  = court_line))
-    
-    ############################################################################
-    # Set Metadata
-    
-    # Draw reference and value
-    text_y = fab_y + 1.0
-    fp.append(Text(type = 'reference', text = 'REF**',
-                   at = (0, -text_y),
-                   layer = "F.SilkS"))
-    fp.append(Text(type = 'user', text = '%R',
-                   at = (0, -text_y),
-                   layer = "F.Fab"))
-    fp.append(Text(type = 'value', text=param['name'],
-                   at = (0, text_y + bank_h + court_offset),
-                   layer="F.Fab"))
-    
-    # Set surface-mount attribute
-    fp.setAttribute('smd')
-    
-    # Part number
-    partnum = param['meta'].get('pn', param['name'].split('_')[1])
-
-    # Pins or pairs/bank
-    if param['banks']['diff'] == banks:
-        # Differential mode: round up to nearest even number of pairs
-        pins_or_pairs = (pad_n // 3) + (pad_n // 3) % 2
-    else:
-        pins_or_pairs = pad_n
-
-    # Description
-    desc = param['meta']['description']
-    desc = desc.format(pn = partnum,
-                       type = mode,
-                       ds = param['meta']['datasheet'],
-                       pitch = pad_pitch,
-                       banks = banks,
-                       pins = pins_or_pairs)
-    fp.setDescription(desc)
-
-    # Tags
-    tags = param['meta']['tags']
-    if 'add-tags' in param:
-        tags += ' ' + param['add-tags']
-    fp.setTags(tags)
-
-    # 3D model path
-    library = param.get('library', default_lib)
-    model_path = os.path.join("${KISYS3DMOD}",
-                              library+".3dshapes",
-                              param['name'] + ".wrl")
-    fp.append(Model(filename = model_path))
-
-    ############################################################################
-    # Write kicad_mod file
-    
-    os.makedirs(library+'.pretty', exist_ok=True)
-    filename = os.path.join(library+'.pretty', param['name']+'.kicad_mod')
-    KicadFileHandler(fp).writeFile(filename)
-
-################################################################################
-if __name__ == '__main__':
-    parser = argparse.ArgumentParser()
-    parser.add_argument('--global-config', type=str, nargs='?',
-                        default='../../tools/global_config_files/config_KLCv3.0.yaml',
-                        help='Global KLC configuration YAML file')
-    parser.add_argument('--series-config', type=str, nargs='?',
-                        default='../conn_config_KLCv3.yaml',
-                        help='Series KLC configuration YAML file')
-    parser.add_argument('--library', type=str, nargs='?',
-                        default='Connector_Samtec_QSeries',
-                        help='Default KiCad library name (without extension)')
-    parser.add_argument('files', metavar='file', type=str, nargs='*',
-                        help='YAML file(s) containing footprint parameters')
-    args = parser.parse_args()
-
-    with open(args.global_config, 'r') as config_stream:
-        try:
-            config = yaml.safe_load(config_stream)
-        except yaml.YAMLError as exc:
-            print(exc)
-
-    with open(args.series_config, 'r') as config_stream:
-        try:
-            config.update(yaml.safe_load(config_stream))
-        except yaml.YAMLError as exc:
-            print(exc)
-
-    if len(args.files) == 0:
-        parser.print_help()
-        sys.exit(1)
-
-    print("Default Library:", args.library)
-    
-    for path in args.files:
-        print("Reading", path)
-        with open(path, 'r') as stream:
-            try:
-                footprints = yaml.safe_load(stream)
-                
-                if footprints is None:
-                    print(path, "empty, skipping...")
-                    continue
-
-                for fp_name in footprints:
-                    fp_params = footprints.get(fp_name)                    
-                    if 'name' in fp_params:
-                        print("WARNING: setting 'name' to", fp_name)
-                        
-                    fp_params['name'] = fp_name
-
-                    print("  - ",
-                          fp_params.get('library', args.library), ".pretty/",
-                          fp_name, ".kicad_mod", sep="")
-                    
-                    generate_one_footprint(fp_params, config, args.library)
-            except yaml.YAMLError as exc:
-                print(exc)
diff --git a/scripts/Connector/Connector_Samtec/QStrip_Horizontal.yaml b/scripts/Connector/Connector_Samtec/QStrip_Horizontal.yaml
deleted file mode 100644
index b9f09f081..000000000
--- a/scripts/Connector/Connector_Samtec/QStrip_Horizontal.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
-# QTH-RA family
-Samtec_QTH-030-xx-x-D-RA_P0.5mm_Horizontal:
-  meta: &QTH-RA_meta
-    description: >-
-      Samtec {pn:s} {pitch:1.2f}mm Q Strip High-Speed Ground Plane {type:s} Strip;
-      {banks:d} bank(s), {pins:d} pins/bank; {ds:s}
-    tags: "connector Samtec QStrip QTH mezzanine terminal horizontal single-ended"
-    datasheet: >-
-      [drawing](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-mkt.pdf),
-      [footprint](http://suddendocs.samtec.com/prints/qth-xxx-xx-x-d-xxx-footprint.pdf)
-  layout: {type: "Terminal", width: 25.72, height: 9.78, y: 3.8, edge: 0.38}
-  banks: {n: 1, diff: 0, space: 20.0, width: 16.5, height: 3.05}
-  pads: &QTH-RA_pads
-    signal: {n: 60, rows: 2, pitch: 0.5, y: [-3.277, 1.334], width: 0.305, height: 1.45}
-    plane: {n: 8, pitch: 2.032, y: -0.851, drill: 0.533, pad: 1.0}
-  holes: # Holes sorted by dimension labels in Samtec ECN-264948 Rev. E
-    - {n: 2, drill: 1.067, pad: 1.8, space: 23.178, y: -3.048} # "A"
-    - {n: 2, drill: 1.448,           space: 21.908, y:  0}     # "B"
-    - {n: 2, drill: 1.067, pad: 1.8, space: 18.190, y:  2.54}  # "C"
-
-Samtec_QTH-060-xx-x-D-RA_P0.5mm_Horizontal:
-  meta: *QTH-RA_meta
-  pads: *QTH-RA_pads
-  layout: {type: "Terminal", width: 45.72, height: 9.78, y: 3.8, edge: 0.38}
-  banks: {n: 2, diff: 0, space: 20.0, width: 16.5, height: 3.05}
-  holes:
-    - {n: 2, drill: 1.067, pad: 1.8, space: 43.180, y: -3.048} # "A"
-    - {n: 2, drill: 1.448,           space: 41.910, y:  0}     # "B"
-    - {n: 3, drill: 1.067, pad: 1.8, space: 38.913, y:  2.54}  # "C"
-
-Samtec_QTH-090-xx-x-D-RA_P0.5mm_Horizontal:
-  meta: *QTH-RA_meta
-  pads: *QTH-RA_pads
-  layout: {type: "Terminal", width: 65.72, height: 9.78, y: 3.8, edge: 0.38}
-  banks: {n: 3, diff: 0, space: 20.0, width: 16.5, height: 3.05}
-  holes:
-    - {n: 2, drill: 1.067, pad: 1.8, space: 63.183, y: -3.048} # "A"
-    - {n: 2, drill: 1.448,           space: 61.913, y:  0}     # "B"
-    - {n: 4, drill: 1.067, pad: 1.8, space: 58.915, y:  2.54}  # "C"
diff --git a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
index 62e6c68de..e46889ec1 100755
--- a/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
+++ b/scripts/Connector/Connector_Samtec/QStrip_Vertical.py
@@ -82,7 +82,7 @@ def generate_one_footprint(param, config, default_lib):
                    'n': n+1, 'slot': slot}
 
             # Skip slots for differential banks
-            if b < param['banks']['diff']:
+            if b < param['banks'].get('diff', 0):
                 if ((slot+1) % 6 == 0 or # Skip every 3rd odd slot
                     (slot+2) % 6 == 0 or # Skip every 3rd even slot
                     # Only add end-of-bank pins if they are completing a pair
@@ -286,7 +286,7 @@ def generate_one_footprint(param, config, default_lib):
     partnum = param['meta'].get('pn', param['name'].split('_')[1])
 
     # Pins or pairs/bank
-    if param['banks']['diff'] == banks:
+    if param['banks'].get('diff', 0) == banks:
         # Differential mode: round up to nearest even number of pairs
         pins_or_pairs = (pad_n // 3) + (pad_n // 3) % 2
     else:

From 2806964b7a475ca21c00ed9643a4e5896d939f33 Mon Sep 17 00:00:00 2001
From: Martin Stejskal <martin.stej@gmail.com>
Date: Sat, 10 Oct 2020 10:08:45 +0200
Subject: [PATCH 62/62] Expand Wago terminal connectors according to the actual
 product range

Not adding any new footprint pattern. Just expanded pin variations.
---
 scripts/TerminalBlock_WAGO/make_TerminalBlock_WAGO.py | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/scripts/TerminalBlock_WAGO/make_TerminalBlock_WAGO.py b/scripts/TerminalBlock_WAGO/make_TerminalBlock_WAGO.py
index e3b160202..a0d45fdba 100644
--- a/scripts/TerminalBlock_WAGO/make_TerminalBlock_WAGO.py
+++ b/scripts/TerminalBlock_WAGO/make_TerminalBlock_WAGO.py
@@ -27,7 +27,7 @@
 
    
     
-    pins=[1,2,3,4,5,6,7,8,9,10,12,16,24]
+    pins=[1,2,3,4,5,6,7,8,9,10,11,12,16,24]
     rm=7.5
     package_height=15
     leftbottom_offset=[2.75, 6.7, 3.75]
@@ -76,7 +76,7 @@
      
 
     
-    pins=[1,2,3,4,5,6,7,8,9,10,12,16,24]
+    pins=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,24]
     rm=5
     package_height=15
     leftbottom_offset=[2.75, 6.7, 3.75]
@@ -122,7 +122,7 @@
                                   tags_additional=[], lib_name="${KISYS3DMOD}/"+classname, classname=classname, classname_description=classname_description, webpage=webpage, script_generated_note=script_generated_note)
 
 
-    pins=[1,2,3,4,6,8,12,16,24,36,48]
+    pins=[1,2,3,4,5,6,7,8,9,12,14,16,24,36,48]
     rm=5
     package_height=14
     leftbottom_offset=[3.5, 9, 3.8]
@@ -172,7 +172,7 @@
                                   nibbleSize=nibbleSize, nibblePos=nibblePos, fabref_offset=fabref_offset,
                                   tags_additional=[], lib_name="${KISYS3DMOD}/"+classname, classname=classname, classname_description=classname_description, webpage=webpage, script_generated_note=script_generated_note)
 
-    pins=[1,2,3,4,6,8,12,16,24]
+    pins=[1,2,3,4,5,6,7,8,9,12,16,24]
     rm=7.5
     package_height=14
     leftbottom_offset=[3.5, 9, 6.3]
@@ -222,7 +222,7 @@
                                   nibbleSize=nibbleSize, nibblePos=nibblePos, fabref_offset=fabref_offset,
                                   tags_additional=[], lib_name="${KISYS3DMOD}/"+classname, classname=classname, classname_description=classname_description, webpage=webpage, script_generated_note=script_generated_note)
 
-    pins=[1,2,3,4,6,8,12,16,24]
+    pins=[1,2,3,4,5,6,8,9,12,16,24]
     rm=10
     package_height=14
     leftbottom_offset=[3.5, 9, 8.8]