Digitizing workflows and troubleshooting
← Curve Digitizer: digitize curves from old datasheets
10. Complete workflows: 6BX7-GT and 2D21
6BX7-GT workflow: Ia = f(Va) for several Vg values
1. Open the image
Use File → Open image… and select the graph raster.
2. Configure axes
X name: Plate Voltage
X unit: V
X min: 0
X max: 500
X scale: linear
Y name: Plate Current
Y unit: mA
Y min: 0
Y max: 70
Y scale: linear
Press Apply axis settings.
3. Calibrate
Capture the data-area corners in BL, BR, TL, TR order. Zoom in when intersections are unclear.
4. Verify
Choose one or more known grid intersections, enter their expected values and inspect ΔX and ΔY.
5. Create the first series
Series name: Vg_-20V
Parameter name: Vg
Parameter value: -20
Parameter unit: V
6. Digitize
Select Add points and place samples along the characteristic. Include curvature changes and regions important for the later fit.
7. Correct
Switch to Edit / move points, inspect markers and move or delete mistakes.
8. Add other grid-voltage series
Create one series per grid voltage, keeping Parameter name = Vg and Parameter unit = V.
9. Save
Save the JSON before fitting. The project retains raw pixel information and can be recalibrated later.
10. Export
X name: Va
X unit: V
Y name: Ia
Y unit: mA
Series parameter name: Vg
Series parameter unit: V
2D21 workflow: control or triggering-threshold curves
Curve Digitizer contains no 2D21-specific logic. Use the same process while naming axes and parameter exactly according to the particular datasheet graph.
Before digitizing a control-curve family, identify:
- the physical quantity on X;
- the physical quantity on Y;
- the variable distinguishing the curves;
- the units printed in the datasheet;
- whether either axis is logarithmic.
Create one series per parameter value. For threshold curves, place points particularly carefully in steep regions and around rapid transitions.
General rule
The application deliberately does not interpret the electronic meaning of a graph. Names, units and series parameter are user-defined. This keeps the digitizer generic enough for vacuum tubes, transistors, diodes, discharge devices, sensors and many other components.
11. Troubleshooting, shortcuts and limitations
The GUI does not start
Check Tkinter:
python3 -c "import tkinter; print(tkinter.TkVersion)"
Then check Pillow and NumPy:
python3 -c "import PIL, numpy; print(PIL.__version__, numpy.__version__)"
The image does not open
The file chooser is configured for PNG, JPG/JPEG and TIF/TIFF. A corrupt or unsupported file is rejected by Pillow and an error message is shown.
Calibration is rejected
- all four points must be distinct and correctly selected;
- axis Min and Max must be finite numeric values and different from each other;
- logarithmic-axis limits must both be greater than zero;
- the four calibration points must not form a degenerate configuration.
Calibrated values look wrong
- check BL, BR, TL, TR order;
- make sure you clicked the data rectangle, not page corners;
- check units, Min/Max and linear/log scale;
- use Verify calibration on known points away from the corners;
- repeat calibration if a corner click was uncertain.
Snap moves points onto the grid
Reduce the radius or disable snap. The algorithm searches for darkness only; it cannot distinguish a curve from a grid line, axis or text.
A point cannot be selected
Confirm that the correct series is active and Edit / move points mode is selected. Zoom in when several markers are very close.
A hidden series appears in CSV
This is expected in the current version. Show / Hide controls Canvas visibility only; export includes all series.
The project cannot find its image
The application tries the stored relative path and then the absolute path. If neither works, it asks you to locate the image manually. Select the same source image used during digitization.
Keyboard and mouse reference
| Command | Shortcut |
|---|---|
| Open image | Ctrl+O |
| Open project | Ctrl+Shift+O |
| Save project | Ctrl+S |
| Save project as | Ctrl+Shift+S |
| Export CSV | Ctrl+E |
| Undo | Ctrl+Z |
| Redo | Ctrl+Y |
| Delete selected point | Delete |
| Fit image to window | F |
| Zoom | mouse wheel |
| Pan | middle- or right-button drag |
Intentional limitations
- no OCR;
- no automatic curve tracing;
- no interpolation;
- no automatic unit conversion;
- no built-in fitting;
- no modification of the original image;
- one global homography per graph.
Program files
curve_digitizer.py: GUI and application workflow;digitizer_model.py: data model, axes, homography and JSON;image_canvas.py: image display, zoom, pan and Canvas/image coordinates;requirements.txt: Pillow and NumPy.
License
The source is marked GPL-3.0-or-later: GNU General Public License version 3 or, at your option, any later version.