Transistor Similarity Calculator Skill
Guidance for working with TransistorSimilarityCalculator in the lib-electronic-components library.
For metadata-driven similarity architecture, see /similarity-metadata:
- SpecImportance levels (CRITICAL, HIGH, MEDIUM, LOW, OPTIONAL)
- ToleranceRule types (exactMatch, percentageTolerance, minimumRequired, etc.)
- SimilarityProfile contexts (DESIGN_PHASE, REPLACEMENT, COST_OPTIMIZATION, etc.)
- Calculator integration patterns and gotchas
Overview
The TransistorSimilarityCalculator compares bipolar junction transistors (BJTs) based on:
- Equivalent groups - Known interchangeable parts
- Polarity - NPN vs PNP (must match)
- Family/series - BC, 2N, PN, etc.
Applicable Types
ComponentType.TRANSISTOR
ComponentType.TRANSISTOR_NXP
ComponentType.TRANSISTOR_VISHAY
// Any type starting with "TRANSISTOR_"
Note: Does NOT apply to MOSFETs - use MosfetSimilarityCalculator for those.
Similarity Thresholds
HIGH_SIMILARITY = 0.9; // Equivalent parts
MEDIUM_SIMILARITY = 0.7; // Same family, compatible
LOW_SIMILARITY = 0.3; // Same category, different specs or polarity
Equivalent Groups
The calculator knows these equivalent groups:
| Group |
Members |
| 2N2222 family |
2N2222, 2N2222A, PN2222, PN2222A |
| 2N3904 family |
2N3904, PN3904 |
| 2N3906 family |
2N3906, PN3906 |
| 2N2907 family |
2N2907, 2N2907A, PN2907, PN2907A |
| BC547 family |
BC547, BC547A, BC547B, BC547C |
| BC557 family |
BC557, BC557A, BC557B, BC557C |
Polarity Rules
NPN and PNP transistors always return LOW_SIMILARITY (0.3)
| Comparison |
Result |
| 2N2222 (NPN) vs PN2222 (NPN) |
0.9 (equivalent) |
| 2N2222 (NPN) vs 2N2907 (PNP) |
0.3 (different polarity) |
| 2N3904 (NPN) vs 2N3906 (PNP) |
0.3 (complementary pair, different polarity) |
Suffix Handling
The calculator ignores common suffixes:
-T, -TR, -TA (tape/reel packaging)
A, B, C (grade suffixes on BC series)
calculator.calculateSimilarity("2N2222", "2N2222-T", registry);
// Returns 0.9 (same transistor, different packaging)
calculator.calculateSimilarity("2n2222", "2N2222", registry);
// Returns 0.9 (case insensitive)
Test Examples
// Equivalent parts
calculator.calculateSimilarity("2N2222", "PN2222", registry);
// Returns 0.9
// Same part with variant
calculator.calculateSimilarity("2N2222", "2N2222A", registry);
// Returns 0.9
// NPN vs PNP
calculator.calculateSimilarity("2N2222", "2N2907", registry);
// Returns 0.3
// Different families
calculator.calculateSimilarity("2N2222", "BC547", registry);
// Returns 0.3
// Non-transistor parts
calculator.calculateSimilarity("LM358", "MC1458", registry);
// Returns 0.0
Implementation Notes
- Returns 0.0 for non-transistor MPNs
- Returns 0.0 for mixed transistor/non-transistor comparison
- Symmetry:
sim(A,B) == sim(B,A)
Learnings & Quirks
Part Number Patterns
2N prefix: JEDEC standard (2N2222, 2N3904, etc.)
PN prefix: Often equivalent to 2N (PN2222 ≈ 2N2222)
BC prefix: European standard (BC547, BC557)
MPS prefix: Motorola/ON Semi (MPS2222A ≈ 2N2222A)
Complementary Pairs
- 2N3904 (NPN) / 2N3906 (PNP)
- BC547 (NPN) / BC557 (PNP)
- These are designed to work together but are NOT equivalent
1---2name: similarity-transistor3description: Use when working with transistor similarity calculations - comparing BJT MPNs, understanding NPN/PNP polarity matching, equivalent groups like 2N2222/PN2222, or transistor-specific similarity logic.4---5
6# Transistor Similarity Calculator Skill
7
8Guidance for working with `TransistorSimilarityCalculator` in the lib-electronic-components library.
9
10---
11
12**For metadata-driven similarity architecture**, see `/similarity-metadata`:
13- SpecImportance levels (CRITICAL, HIGH, MEDIUM, LOW, OPTIONAL)
14- ToleranceRule types (exactMatch, percentageTolerance, minimumRequired, etc.)
15- SimilarityProfile contexts (DESIGN_PHASE, REPLACEMENT, COST_OPTIMIZATION, etc.)
16- Calculator integration patterns and gotchas
17
18---
19
20## Overview
21
22The `TransistorSimilarityCalculator` compares bipolar junction transistors (BJTs) based on:
23- **Equivalent groups** - Known interchangeable parts
24- **Polarity** - NPN vs PNP (must match)
25- **Family/series** - BC, 2N, PN, etc.
26
27## Applicable Types
28
29```java
30ComponentType.TRANSISTOR
31ComponentType.TRANSISTOR_NXP
32ComponentType.TRANSISTOR_VISHAY
33// Any type starting with "TRANSISTOR_"
34```
35
36Note: Does NOT apply to MOSFETs - use `MosfetSimilarityCalculator` for those.
37
38## Similarity Thresholds
39
40```java
41HIGH_SIMILARITY = 0.9; // Equivalent parts
42MEDIUM_SIMILARITY = 0.7; // Same family, compatible
43LOW_SIMILARITY = 0.3; // Same category, different specs or polarity
44```
45
46## Equivalent Groups
47
48The calculator knows these equivalent groups:
49
50| Group | Members |
51|-------|---------|
52| 2N2222 family | 2N2222, 2N2222A, PN2222, PN2222A |
53| 2N3904 family | 2N3904, PN3904 |
54| 2N3906 family | 2N3906, PN3906 |
55| 2N2907 family | 2N2907, 2N2907A, PN2907, PN2907A |
56| BC547 family | BC547, BC547A, BC547B, BC547C |
57| BC557 family | BC557, BC557A, BC557B, BC557C |
58
59## Polarity Rules
60
61**NPN and PNP transistors always return LOW_SIMILARITY (0.3)**
62
63| Comparison | Result |
64|------------|--------|
65| 2N2222 (NPN) vs PN2222 (NPN) | 0.9 (equivalent) |
66| 2N2222 (NPN) vs 2N2907 (PNP) | 0.3 (different polarity) |
67| 2N3904 (NPN) vs 2N3906 (PNP) | 0.3 (complementary pair, different polarity) |
68
69## Suffix Handling
70
71The calculator ignores common suffixes:
72- `-T`, `-TR`, `-TA` (tape/reel packaging)
73- `A`, `B`, `C` (grade suffixes on BC series)
74
75```java
76calculator.calculateSimilarity("2N2222", "2N2222-T", registry);
77// Returns 0.9 (same transistor, different packaging)
78
79calculator.calculateSimilarity("2n2222", "2N2222", registry);
80// Returns 0.9 (case insensitive)
81```
82
83## Test Examples
84
85```java
86// Equivalent parts
87calculator.calculateSimilarity("2N2222", "PN2222", registry);
88// Returns 0.9
89
90// Same part with variant
91calculator.calculateSimilarity("2N2222", "2N2222A", registry);
92// Returns 0.9
93
94// NPN vs PNP
95calculator.calculateSimilarity("2N2222", "2N2907", registry);
96// Returns 0.3
97
98// Different families
99calculator.calculateSimilarity("2N2222", "BC547", registry);
100// Returns 0.3
101
102// Non-transistor parts
103calculator.calculateSimilarity("LM358", "MC1458", registry);
104// Returns 0.0
105```
106
107## Implementation Notes
108
109- Returns 0.0 for non-transistor MPNs
110- Returns 0.0 for mixed transistor/non-transistor comparison
111- Symmetry: `sim(A,B) == sim(B,A)`
112
113---
114
115## Learnings & Quirks
116
117### Part Number Patterns
118- `2N` prefix: JEDEC standard (2N2222, 2N3904, etc.)
119- `PN` prefix: Often equivalent to 2N (PN2222 ≈ 2N2222)
120- `BC` prefix: European standard (BC547, BC557)
121- `MPS` prefix: Motorola/ON Semi (MPS2222A ≈ 2N2222A)
122
123### Complementary Pairs
124- 2N3904 (NPN) / 2N3906 (PNP)
125- BC547 (NPN) / BC557 (PNP)
126- These are designed to work together but are NOT equivalent
127
128<!-- Add new learnings above this line -->