2DP

PMS 2D-P. Identical to the 2D-C in this package except the diode pitch – eight times coarser, same 32-diode array, same reader, same timing family – and a stage-4 tasMax the run must supply.

The instrument, as the code sees it

Every row below is read from constants.IMGPROC_CONFIG, the port of imgProc_sm.m's own probe switch. None of it is typed into this page.

probetype0
diodes32
diode resolution (ds)200 um
array reach6.4 mm (32 x 200 um)
timing familypms
needs a TAS fileno
Stage-2 readerarrayprobe.readers.pms.read_binary_PMS
image word8-bit, not inverted

What runs today

Imported from the coverage matrix rather than restated, so this table and docs/developer/COVERAGE_MATRIX.md cannot disagree.

Engineserial–chunks–jobs–s2-jobs–jit
arrayprobe_uiopsCROSS-CHECKEDCROSS-CHECKEDCROSS-CHECKEDrefused (not built)CROSS-CHECKED
arrayprobe_soda2untesteduntesteduntesteduntesteduntested

How to read this table.

No shipped preset names this probe. A run needs a campaign preset declared in your own TOML ([run].presets), and [run].preset is required – it has no default.

Where a cell above reads refuses (by design) or REFUSES (DEFECT), the reason is in docs/developer/COVERAGE_MATRIX.md for that exact cell. A refusal here is always preferred to a silently wrong fast answer, and the two words are different: by design means the combination is meaningless, defect means it should work and does not yet.

Caveats

Consequences of this probe's own geometry

Computed from the table above, not recalled – each says which arithmetic produced it.

The 32-diode hollow scan covers this probe's whole array (32 diodes)

calculate_reject_unified.m:465 packs diodes 1-32 whatever the probe's width. On a 32-diode probe that is the entire array, so the truncation defect that bites the wider probes is a no-op here – and so, on this probe, is the wide_hollow_fix enhancement. Worth stating explicitly, because the caveat is real elsewhere in this package and does not transfer here.

Computed from: constants.IMGPROC_CONFIG['2DP'].diodenum = 32

The array images 6.4 mm, and a size ladder must respect that

32 diodes at 0.2 mm is 6.4 mm across. That is not a hard ceiling on recorded size, and it would be an overclaim to say so: a particle that merely has its centre in the array (sa_method 0) or is sized through the Heymsfield & Parrish reconstruction (sa_method 2) can be recorded LARGER than the array it crossed. The bound that survives is a factor, not an equality – a centre-in particle reaches about twice the array width, not twenty times it. So the honest reading is: a bin above roughly 12.8 mm on this probe is beyond what any sizing convention here produces, and a ladder whose top lies there is a configuration error rather than a sparse flight. The upstream finding that the default 2D-S bin table became the HVPS one (recorded in the review of the upstream code) is exactly that: a 30 mm ladder handed to a 1.28 mm array, 23x its width, and the symptom was a well-formed file with almost nothing in it.

Computed from: constants.IMGPROC_CONFIG['2DP']: diodenum 32 x ds 0.2 mm = 6.4 mm

Chunked stage 3: supported

Timing family pms is in CHUNKABLE_TIMINGS_V35, so --chunks splits stage 3 with no carried state and the result is byte-identical to a serial run.

Computed from: constants.IMGPROC_CONFIG['2DP'].timing = 'pms'; CHUNKABLE_TIMINGS_V35 = ('dmt', 'pms', 'fast2dc'); PRIMABLE_TIMINGS_V35 = ('spec',)

What a person knows and a constant does not

Curated in probe_caveats.json (in scripts/). Every citation is re-checked against the real file each time this page is generated.

Everything said about the 2D-C applies here unchanged

Same probetype (0), same read_binary_PMS reader, same three-output driver shape at stage 2 (the raw decode), same stage-4 path under v3.5 (no 2D-P-specific case has been run). The differences the code knows about are ds (0.2 mm against the 2D-C's 0.025 mm) and the missing tasMax below.

Source: src/arrayprobe/driver/run_flight.py

Stage 4 needs tas_max: the run supplies the probe's own value

sizeDist.m's 2DP case assigns no tasMax in any UIOOPS release, and the clock rollover, the area reconstruction and the output all read it, so MATLAB dies there. Give the instrument's own value in m/s with [thresholds].tas_max in the config file you pass to arrayprobe run. There is no default, because tasMax belongs to the individual probe; a 2DP run without it is refused before stage 4, and the value is written to the sd .call stamp. The Configuration page's section on the two inputs a probe case can lack has the details.

Source: src/arrayprobe/config.py

Reject code 't' is never emitted, on any probe

calculate_reject_unified.m:269 rejects on the tighter threshold (max_comp_img_ar) before :272 tests the looser one (max_edge_img_ar), so the second branch is unreachable and image_auto_reject never contains 116. The netCDF Description attribute at imgProc_sm.m:325-329 states the two thresholds the other way round. Both are preserved verbatim – this is a faithfully reproduced upstream defect, not a port bug. If you are tabulating reject codes, 't' is structurally absent rather than merely rare.

Trust the .call sidecar, not the filename

Every stage stamps its configuration into a .call sidecar and refuses an input that disagrees or carries no stamp. If you write products with your own script instead of arrayprobe run, you inherit this problem.

Ratios this probe appears in

None. No ratio measured so far has this probe on either side – which follows from the data held: a ratio needs two chains over the same raw, and there is no raw here to run two chains over.

Where to go next

Every probe x engine x mode cell, with its reasondocs/developer/COVERAGE_MATRIX.md
Which engine to usedocs/developer/TWO_ENGINES.md
The airspeed chain, which sets the sample volumedocs/developer/TAS.md
How the upstream code was reviewed, and what was founddocs/developer/UPSTREAM_REVIEW.md
All seven probes at a glanceThe seven probes

Generated, not hand-maintained, from arrayprobe.constants.IMGPROC_CONFIG, coverage_matrix.build_matrix() and the curated caveats in probe_caveats.json.