Monthly Science: COVID-19 Lagged CFR

In round numbers, a nasty COVID-19 infection ramps up for a week before you develop enough symptoms to finally get tested. Various states report various combinations of test results as confirmed / probable / tested “cases”, with “tested” including any possible combination (or lack thereof) of viral / antibody presence. As a result, the number of “daily cases” doesn’t mean much, but it’s the only number we’re likely to get. With that in mind, about 6% of those tested have a positive result for whatever they’re being tested for. Got that?

At some point within a week or two of being infected, tested, and found positive, about 2.8% of all cases will be hospitalized. That’s 2.4% of cases in the 18-49 age bracket and 4.3% of my decade (64-75):

COVID-19-NET_Image - Weekly Hospitalizations - 2020-06-24
COVID-19-NET_Image – Weekly Hospitalizations – 2020-06-24

You get the Weekly Rate chart from the CDC’s weekly data by drilling into the Hospitalization block to reach the summary chart (through Additional Rate Data), dinking with the controls to show the Weekly Rate and COVID-NET Surveillance Area, then turning off the overlapping age ranges. Most of us seem to have an Underlying Medical Condition or two affecting the outcome.

Roughly a week (more or less, kinda-sorta) after hospitalization, 15% of all patients and 28% of those over 65 will die:

COVID-19 - Weekly Hospitalization Outcomes by Age - 2020-06-24
COVID-19 – Weekly Hospitalization Outcomes by Age – 2020-06-24

You get that chart from the Lab-Confirmed Hospitalizations page by dinking around with the controls for the lower-right pane. The Overall column represent 5800 patients and, as it happens, each column represents about 2000 patients.

Because it takes about three weeks to go from “infected” to “dead”, the ratio of [daily deaths today] to [daily positive test results from three weeks earlier] gives (In My Opinion) a better indication of the expected outcome than the simpler ratio of [today’s deaths] to [today’s test positives]. Because the news headlines always feature cumulative numbers, these numbers aren’t at the tip of anyone’s awareness.

Fetch the daily data as a CSV from the COVID Tracking Project’s Historical Data, compute the day-to-day values from the appropriate columns, then slam the columns into a graph:

COVID-19 - Lagged Daily CFR - 2020-06-23
COVID-19 – Lagged Daily CFR – 2020-06-23

The strong weekly component is surely a combination of data aggregation (no weekend reports?) and actual death events (nobody dies on Sunday?), but there’s no way to know from here. There’s plenty of noise in April which I decided to completely ignore; consult the raw data and draw your own conclusion.

Eyeballometrically, the lagged CFR has been declining linearly by 1% every 3 weeks since mid-May and should be around 2% in July. If you’re under 50 and in reasonable health, the news is even better, because you’re very unlikely to either need hospitalization or die from it. Again, work the numbers out for yourself from the raw data.

However, AFAICT, those results depend on a relatively unloaded healthcare system, because little of the US has (yet) to experience the catastrophic overload seen during the early onset in Washington state and NYC. This chart of ICU occupancy suggests the worst is yet to come for folks in states where expectations don’t match up to the reality of exponential growth:

COVID-19 - All-patient ICU occupancy - 2020-06-23
COVID-19 – All-patient ICU occupancy – 2020-06-23

It seems having the ICUs tick along at 50% occupancy is about right, so the states with 70+% occupancy don’t have much surge margin.

Right now, COVID-19 is burning through the US population at about 30,000 confirmed new cases per day, which means 840 people will require hospitalization every day next week (in addition to all the usual hospitalizations for other causes) and, in another week, 126 people will die every day. Maybe 40 people under age 50 will die, so the human herd will develop immunity by killing off we Olde Fartes.

After I ran those numbers, the rate passed 40,000 cases per day, with no sign of slowing down and indications it’s getting worse faster. Scale my numbers up by 30%: 1100 hospitalizations and 170 deaths per day in a few weeks.

However, if you live in one of those dark purple states already showing 70+% ICU utilization, don’t do anything starting with “Hold my beer. Watch this!” because you will not get a welcoming Emergency Room reception. The CNN synoptic view of new cases continues to be informative.

One of Mary’s cronies is married to a guy who knows this whole COVID-19 thing is a hoax: “They’d all have died of something else, anyway.” Plotting all-cause fatalities vs. age (2020 in red, last five years in gray) shows tens of thousands of people are dying from something new this year:

All-cause deaths by age - current vs historical - 2020-06-26
All-cause deaths by age – current vs historical – 2020-06-26

Before you do the happy dance about the downward slope toward the right, read the disclaimer:

Data are incomplete because of the lag in time between when the death occurred and when the death certificate is completed, submitted to NCHS and processed for reporting purposes. This delay can range from 1 week to 8 weeks or more, depending on the jurisdiction and cause of death.

Some of the decline is real, because NYC hospitals aren’t running out of body bags nowadays, but much of it seems due to the paperwork not catching up with reality.

Judging from the slope of the Johns Hopkins summary of daily cases in the US, corroborated by the CNN projections, the doubling time (before the most recent increases) runs around four weeks: five million cases by the end of July and ten million by the end of August. Later this year, we’ll know how well saying “It’ll be gone by April summer Election Day 2021″ without doing anything has worked out for us.

The overall death rate should decline in a few years, because those (of us?) who died early will reduce the later rate, but it’s not something to look forward to.

Back to the Basement Laboratory … and, on good days, the rail trail.

Glass Tiles: USB Charger Current Waveforms

Looking at what comes out of various USB chargers, with the Tek current probe monitoring the juice:

USB Current-Probe Extender - in action
USB Current-Probe Extender – in action

First, a known-good bench supply set to 5.0 V:

Tiles 2x2 - bench supply - 50 mA-div
Tiles 2×2 – bench supply – 50 mA-div

The yellow trace is the Glass Tile Heartbeat output, which goes high during the active part of the loop. The purple trace shows the serial data going to the SK6812 RGBW LEDs. The green trace is the USB current at 50 mA/div, with the Glass Tile LED array + Arduino drawing somewhere between 50 and 100 mA; most of that goes to the LEDs.

The current steps downward by about 10 mA just after the data stream ends, because that’s where the LEDs latch their new PWM values. The code is changing a single LED from one color to another, so the current will increase or decrease by the difference of the two currents.

A charger from my Google Pixel 3a phone (actually made by Flextronics and, uniquely, UL listed), with Google’s ever-so-trendy and completely unreadable medium gray lettering on a light gray plastic body:

Google Pixel charger - dataplate
Google Pixel charger – dataplate

The current waveform looks only slightly choppy:

Tiles 2x2 - Google Flextronics charger - 50 mA-div
Tiles 2×2 – Google Flextronics charger – 50 mA-div

An AmazonBasics six-port USB charger from tested by Intertek:

AmazonBasics charger - dataplate
AmazonBasics charger – dataplate

The waveform:

Tiles 2x2 - Amazon Basics Intertek Basics charger - 50 mA-div
Tiles 2×2 – Amazon Basics Intertek Basics charger – 50 mA-div

A blackweb (their lack of capitalization) charger, also made tested by Intertek:

blackweb charger - dataplate
blackweb charger – dataplate

The current:

Tiles 2x2 - blackweb charger - 50 mA-div
Tiles 2×2 – blackweb charger – 50 mA-div

Finally, one from a lot of dirt-cheap chargers from eBay:

Anonymous white charger - dataplate
Anonymous white charger – dataplate

Which has the most interesting current waveform of all:

Tiles 2x2 - anon white charger - 50 mA-div
Tiles 2×2 – anon white charger – 50 mA-div

A closer look:

Tiles 2x2 - anon white charger - pulse detail - 50 mA-div
Tiles 2×2 – anon white charger – pulse detail – 50 mA-div

From the 75 mA baseline, the charger is ramming 175 mA pulses at 24 kHz into the filter cap on the Arduino Nano PCB! The green trace has a few seconds of (digital) persistence, so you’re seeing a lot of frequency jitter; the pulses most likely come from a voltage comparator controlling the charger’s PWM cycle.

It’s about what one should expect for $1.28 apiece, right?

They’re down to $1.19 today: who knows what the waveform might be?

Update: Having gotten a clue from a comment posted instantly after I fat-fingered the schedule for this post, I now know Intertek is a testing agency, not a manufacturer.

USB Testers vs. Reality

Set up a test harness with a USB tester between two amputated USB cables:

USB Testers - Keweisi plugged
USB Testers – Keweisi plugged

Input comes from a bench power supply:

USB Testers - 5 V input clips
USB Testers – 5 V input clips

Output goes to an 8 Ω power resistor:

USB Testers - 8 ohm load
USB Testers – 8 ohm load

Yes, it’s mounted on the isothermal block from back in the Thing-O-Matic days, disspating barely 2 W. Thermocouples FTW, but in this case I don’t care about the temperature.

Because these are random USB cables, they come with the usual caveats. Indeed, I measured a 9.8 Ω loop resistance (!) at the input end. The resistor is slightly under 8Ω, so the 1.8 Ω wire resistance suggests (at least) one of the USB cables contains very little copper. That’s measured without the USB tester in series, because it tries really hard to power up from the ohmmeter’s source voltage and basically shorts out the resistor.

Both testers accurately report the source voltage with no load, so I presume the voltage shown with current flowing through the resistor represents the actual voltage at the tester. The source cable drops a substantial voltage under load.

The 8 Ω resistor should draw 5 V / 8 Ω = 625 mA at 5 V. The voltmeter probes provide a non-intrusive way to measure the actual current by working backwards: current = volts / 8 Ω. As it turned out, the resistor sees less than 4 V with the bench supply set to 5.0 V.

So, we begin.

With the bench supply at 5.5 V, the Keweisi meter shows 4.9 V and 0.48 A with 4.0 V across the resistor for an actual 500 mA current. The source cable drops 600 mV, indicating a wire resistance of 1.2 Ω, about 2/3 of the total wire resistance.

The anonymous meter produces two different results for an actual 500 mA current, depending on nothing under my control:

  • Supply 5.3 V, indicated 5.0 V and 0.5 A
  • Supply 5.1 V, indicated 4.76 V and 0.5 A

Both results show about 300 mV source drop, half of the Keweisi meter’s 600 mV, suggesting a wire resistance of 0.6 Ω. The meter displays a blinking ▲, presumably indicating the input voltage is kinda high.

I have no explanation.

After the meters measured an actual 500 mA load for about an hour:

  • Keweisi: 1.6 hr → 782 mA·h, should be 800 mA·h
  • Anonymous: 1.0 hr → 515 mA·h, should be 500 mA·h

Which roughly agrees with the battery charge data:

USB Testers - Charge vs Runtime
USB Testers – Charge vs Runtime

The anonymous meter seems reasonably accurate, the Keweisi meter undershoots by 2.5%, and they’re both Close Enough for simple measurements.

There’s probably a duty cycle effect, too, because the battery charger presents a pulsed load, but I’m just not going to worry about it.

Robin Nest: Eggs!

After pausing to recover from construction, Ms Robin laid four eggs in four days:

  • Garage Robin Nest - first egg - 2020-05-28
  • Garage Robin Nest - 2 eggs - 2020-05-29
  • Garage Robin Nest - 3 eggs - 2020-05-30
  • Garage Robin Nest - 4 eggs - 2020-05-31

She’s surprisingly tolerant of our comings and goings, as well as garage door openings and closings:

Garage Robin Nest - robin brooding
Garage Robin Nest – robin brooding

We’re trying to stay out of her way as much as possible.

The gallery pix come from my phone, held against the soffit over the nest, and aimed entirely by feel, while standing on the Greater Ladder. If I had access to the top of the soffit, I’d drill a webcam hole, but …

Monthly Science: USB Current Testers vs. NP-BX1 Batteries

Having some interest in my Sony HDR-AS30 helmet camera’s NP-BX1 battery runtime, I’ve been measuring and plotting recharge versus runtime after each ride:

USB Testers - Charge vs Runtime
USB Testers – Charge vs Runtime

The vertical axis is the total charge in mA·h, the horizontal axis is the discharge time = recorded video duration. Because 1 A = 1 coulomb/s, 1 mA·h = 3.6 C.

The data points fall neatly on two lines corresponding to a pair of cheap USB testers:

USB Testers
USB Testers

When you have one tester, you know the USB current. When you have two testers, you’re … uncertain.

The upper tester is completely anonymous, helpfully displaying USB Tester while starting up. The lower one is labeled “Keweisi” to distinguish it from the myriad others on eBay with identical hardware; its display doesn’t provide any identifying information.

The back sides reveal the current sense resistors:

USB Testers - sense resistors
USB Testers – sense resistors

Even the 25 mΩ resistor drops enough voltage that the charger’s blue LED dims appreciably during each current pulse. The 50 mΩ resistor seems somewhat worse in that regard, but eyeballs are notoriously uncalibrated optical sensors.

The upper line (from the anonymous tester) has a slope of 11.8 mA·h/minute of discharge time, the lower (from the Keweisi tester) works out to 8.5 mA·h/minute. There’s no way to reconcile the difference, so at some point I should measure the actual current and compare it with their displays.

Earlier testing suggested the camera uses 2.2 W = 600 mA at 3.7 V. Each minute of runtime consumes 10 mA·h of charge:

10 mA·h = 600 mA × 60 s / (3600 s/hour)

Which is in pretty good agreement with neither of the testers, but at least it’s in the right ballpark. If you boldly average the two slopes, it’s dead on at 10.1 mA·h/min; numerology can produce any answer you need if you try hard enough.

Actually, I’d believe the anonymous meter’s results are closer to the truth, because recharging a lithium battery requires 10% to 20% more energy than the battery delivered to the device, so 11.8 mA·h/min sounds about right.

Memo to Self: Trust, but verify.

Snakeskin

A shed snakeskin appeared when I opened the garage door:

Snakeskin - overview
Snakeskin – overview

The skin sits atop the retaining wall next to the door, on a stone(-like) background with poor contrast: even an empty snake has good camouflage!

The exterior looks like genuine snakeskin:

Snakeskin - exterior
Snakeskin – exterior

I didn’t know the interior has an entirely different pattern:

Snakeskin - interior
Snakeskin – interior

As far as I can tell, the snake was going about its business elsewhere in the yard.

To be fair, there’s some luck involved.

Update: After Mitch nudged me, I found the (somewhat the worse for wear) snakeskin again. The head end was split, much as I described, but the tail end was intact (the snake having pulled out like a finger from a glove) and what I though was the inside of the top was the outside of the bottom, just pushed inward to form a very thin double layer.

Today I Learned … to always look closer!