This section describes how to access data from the finished wafer-level probing runs:
- What data is available?
- Exploring data through the DCA website
- Downloading all available data with a Python script
- Customised data selection via SQL queries
What data is available?
After a completed wafer-probing run its output (i.e. raw data) is analysed by an operator, as described in Analysis guide, to produce several collections of plots, wafer maps and book-keeping files under the plots/
output folder. All this raw data and analysis output are stored in CERNBOX for potential reprocessing with tuned chip-quality criteria.
A subset of the measured values are then uploaded to the DCA (Detector Construction Assembly) database for retrieval by any user with CERN credentials, e.g. for assembly of the modules or for detector commissioning.
See an overview in this presentation
List of values stored in DB
FIELD_NAME in DB | Attribute name on DCA website | Description |
---|---|---|
Wafer information | --- |
Single value per wafer in wafer_*.csv
|
PART_NAME_LABEL |
Name label | Full ID of the wafer: BATCH_WAFER
|
PROBE_CARD_ID |
Probe Card ID | ID of the probe card |
PROBE_CARD_VERSION |
Probe Card Version | Version of the probe card |
PROBE_SITE |
Probing Site | Site on which probing was performed |
TEST_START |
Date/time of the start of the probing run | |
CUT_VERSION |
Version of analysis configuration | |
ENABLED_TESTS |
Bitstring of enabled tests from the analysis configuration | |
NOTES |
Operator's notes | |
Chip information | --- |
Single value per chip in chip_info_*.csv
|
PART_NAME_LABEL |
Name label | Full ID of the chip: BATCH_WAFER_CHIP
|
PROBE_SITE |
Site on which probing was performed | |
TEST_START |
Date/time of the start of probing the chip | |
VREF_OVP_V |
Highest reference voltage reached before overvoltage protection | |
BANDGAP_V |
Bandgap voltage | |
IANA_DEFAULT_A |
Analog current during IREF trimming in LDO mode | |
IDIG_DEFAULT_A |
Digital current during IREF trimming in LDO mode | |
IREF_TRIM_CODE |
IREF Trim Code | Selected IREF trim value |
VOFS_V |
Voltage measured at the selected IREF trim value | |
IREF_A |
Current measured at the selected IREF trim value | |
VDDA_DEFAULT_V |
Analog voltage during IREF trimming in LDO mode | |
VDDD_DEFAULT_V |
Digital voltage during IREF trimming in LDO mode | |
VDDD_TRIM_CODE |
VDDD Trim Code | Selected digital VDD-trimming code |
VDDD_TRIM_V |
Digital voltage at the selected trim value | |
IDIG_CONFIG_A |
Digital current during VDD trimming | |
VDDA_TRIM_V |
Analog voltage at the selected trim value | |
VDDA_TRIM_CODE |
VDDA Trim Code | Selected analog VDD-trimming code |
IANA_CONFIG_A |
Analog current during VDD trimming | |
VREF_ADC_V |
Reference voltage of the ADC | |
VREF_PRE_V |
Preregulator output voltage | |
VINA_START_V |
Analog voltage during startup in ShuntLDO mode | |
VIND_START_V |
Digital voltage during startup in ShuntLDO mode | |
OCCUP_ANA |
Analog pixel occupancy | |
OCCUP_DIG |
Digital pixel occupancy | |
EFUSE_CODE |
Serial number | EFUSE code of the chip |
IANA_PERIFERY_A |
Analog current consumed by pixels after VDD trimming | |
IDIG_PERIFERY_A |
Digital current consumed by pixels after VDD trimming | |
ADC_OFF_V |
Offset of the straight-line fit of the ADC calibration curve | |
ADC_SLO |
Slope of the straight-line fit of the ADC calibration curve | |
IV_ANA_OFF_V |
Offset of the straight-line fit of the Analog I-V curve | |
IV_ANA_K |
K-value of the straight-line fit of the Analog I-V curve: K = Rext/slope
|
|
IV_DIG_OFF_V |
Offset of the straight-line fit of the Digital I-V curve | |
IV_DIG_K |
K-value of the straight-line fit of the Digital I-V curve: K = Rext/slope
|
|
THRES_MEAN |
Mean threshold value before tuning | |
THRES_RMS_UNTUNED |
RMS of threshold distribution before tuning | |
PIX_STUCK |
Number of stuck pixels | |
THRES_RMS_TUNED |
RMS of threshold distribution after tuning | |
NOISE_MEAN |
Mean of the noise distrubution | |
NOISE_RMS |
RMS of the noise distribution | |
THRES_HIGH |
Fraction of pixels with threshold of 200+ electrons above mean | |
THRES_LOW |
Fraction of pixels with threshold of 200+ electrons below mean | |
TDAC_LOW |
Fraction of pixels with TDAC value 0
|
|
TDAC_HIGH |
Fraction of pixels with TDAC value 31
|
|
VCAL_HIGH_OFF |
Offset of the straight-line fit of VCAL_HIGH calibration curve |
|
VCAL_HIGH_SLO |
Slope of the straight-line fit of VCAL_HIGH calibration curve |
|
VCAL_MED_OFF |
Offset of the straight-line fit of VCAL_MED calibration curve |
|
VCAL_MED_SLO |
Slope of the straight-line fit of VCAL_MED calibration curve |
|
RADSENS_ACB |
Ideality factor of the temperature sensor | |
RADSENS_SLDOA |
Ideality factor of the temperature sensor | |
RADSENS_SLDOD |
Ideality factor of the temperature sensor | |
TEMPSENS_ACB |
Ideality factor of the temperature sensor | |
TEMPSENS_SLDOA |
Ideality factor of the temperature sensor | |
TEMPSENS_SLDOD |
Ideality factor of the temperature sensor | |
TEMP_DEGC |
Temperature of the chuck during temperature-sensors calibration | |
GRADE |
Grade | Grade of the chip |
FAILURE_REASON |
Failure Reason | Name of the 1st test where the chip was not green |
INJ_CAPACIT_F |
Injection capacitance | |
Chip data | --- |
Multiple X:Y points per chip in chip_data_*.json
|
VOFS |
IREF trimming: X: IREF trim value; Y: Voltage [V] | |
IREF |
IREF trimming: X: IREF trim value; Y: Current [A] | |
VDDD |
VDDD trimming: X: VDDD trim value; Y: Digital voltage [V] | |
VDDA |
VDDA trimming: X: VDDA trim value; Y: Analog voltage [V] | |
ADC |
ADC calibration: X: ADC value; Y: Voltage [V] | |
IV_ANA |
Analog I-V curve: X: Current [A]; Y: Voltage [V] | |
IV_DIG |
Digital I-V curve: X: Current [A]; Y: Voltage [V] | |
IV_ANA_HIGH |
Analog I-V curve: X: Current [A]; Y: Voltage [V] up to 8A | |
IV_DIG_HIGH |
Digital I-V curve: X: Current [A]; Y: Voltage [V] up to 8A | |
VCAL_* |
VCAL DAC calibrations: X: Digital value; Y: Voltage [V] | |
R_LDO |
Resistances in LDO: X: Source ID; Y: Resistance [Ohm] | |
R_SLDO |
Resistances in SLDO: X: Source ID; Y: Resistance [Ohm] |
Besides individual measured values a few files are also planned to be stored in the database (DB) for future reference:
-
_summary_map_ext.pdf
- wafer map with the final chip statuses, as sent to the dicing company -
wafer_wise_plots.pdf
- collection of all the wafer-wise histograms used for chip-quality definition -
wafer_wise_all_plots.pdf
- extended collection of wafer-wise histograms, includingIGNORED
distributions -
_region_definitions.py
- chip-quality region definitions for each histogram used during analysis -
_discarded_chips.json
- list of chips discarded due to external issues (e.g. DAQ problems, mechanical damage, etc.)
NOTE: Storage of files in DB is not supported yet. In the meantime they can be accessed via CERNBOX for CROC-v1 and for CROC-v2.
DCA website
Exploring data through theAll the data about an individual part can be conveniently explored through a web-browser: https://cmsdca.cern.ch/trk_cmsr/construct/parts/
To quickly find the necessary item you need to specify the proper Kind of part: CROC Wafer
, CROC Chip
(or CROC Proto Wafer
, CROC Proto Chip
) and Name label, e.g. 07D4
.
After filtering the DB items press the eye sign in the Action
column to display information about it.
EXAMPLE: These are the links to the CROC Proto Wafer 07D4 and one of its chips: CROC Proto Chip 07D4_19.
Attributes
At the bottom of the item's page a list of Attributes can be found, which are a special kind of data with a predetermined list of possible values. They are useful for filtering wafers or chips by an exact value of one or more attributes, such as Grade or trim codes. Grade of a chip is also propagated to its Status attribute, turning it to Bad
if the chip grade is not green
.
EFUSE
code of each chip is stored as a Serial number and displayed at the top of the page.
WLT measurements
All the other WLT data can be found under the Conditions > Measurements subsection, where it is split into CROC Chip Probe Results
and CROC Chip Probe Data
collections. Select the relevant collection and press Display
button to explore its content, which can be viewed as a table or even plotted.
NOTE: Some parts may have multiple collections of the same type. This can happen when WLT results were uploaded multiple times due to technical issues or some updates in the test or analysis procedures. In that case you should use the most recent collection with the highest
Run No.
value.
To quickly get all the data for multiple or all chips of the wafer using a command-line tool, refer to the next section.
Downloading all available data with a Python script
A dedicated Python script provides a convenient way to download all the WLT data available in DB for a specific wafer: wlt/utils/db_reader.py
NOTE: In case of technical issues try to update your script with the latest version from the
visualisation
branch to be compatible with the latest RestHub and CERN authentication APIs that can occasionally change. Regarding eventual authentication issues check the related subsection below.
Execution of this script requires Python 3
, and is guaranteed to work in Python 3.7
. It also relies on a few external packages that can be installed by:
pip install requests ilock bs4
To download all the data available for the CROC Proto Wafer
NC0W14_02C
:
python db_reader.py -2 -w NC0W14_02C
ATTENTION: If you don't have an OTP (One-Time Password) that is requested after username/password, then your CERN account is not using 2FA (Two-Factor Authentication). In that case remove the
-2, --2fa
option from the command to only use username/password for authentication.
NOTE: By default the production
CROC Wafer
is queried. You can use-p, --proto
option to query aCROC Proto Wafer
instead.
You can list available wafer IDs using patterns with *
in the wafer name or adding +
to query the parts table instead of the WLT-conditions table:
-
python db_reader.py -w "*"
- list IDs of all the wafers for which WLT data is available; -
python db_reader.py -w "+*"
- list IDs of all the wafers that have been registered in the DB, even without WLT data; -
python db_reader.py -w "+NC0W14_*"
- list IDs of all the registered wafers from batchNC0W14
;
Additional command-line options to reduce the amount of downloaded data and consequent query time:
- only specific chips:
python db_reader.py -w NC0W14_02C -c A2 92 82
- only specific fields:
python db_reader.py -w NC0W14_02C -f IREF_TRIM_CODE VDDD_TRIM_CODE VDDA_TRIM_CODE
- just test the DB connection and list available field names:
python db_reader.py -t
NOTE: Data for every chip is read individually, which takes several minutes for all the 138 chips in a wafer.
If you only need data for a few chips, specify their IDs-c <chip1> <chip2> ...
to save time.
The script stores output to 3 separate files:
-
wafer_NC0W14_02C.json
- general data about the wafer and the wafer-probing run -
chip_info_NC0W14_02C.csv
- measured values for each chip organised in columns, with 1 row/chip -
chip_data_NC0W14_02C.csv
- multiple-point measurements with 1 row/point, e.g. calibration curves
Authentication aspects
To avoid entering your CERN username/password each time, db_reader.py
stores your credentials in a .session.cache
file. It is recommended to delete this file after finishing your work for reducing security risks.
xml.etree.ElementTree.ParseError: not well-formed (invalid token)
If you're receiving an error like above, you must be using a wrong authentication type.
Make sure that you include option -2, --2fa
if you have 2FA (Two-Factor Authentication) enabled for your CERN account, or exclude it otherwise.
Customised data selection via SQL queries
All the data stored in DB can be accessed via the dedicated RestHub API: https://cmsdca.cern.ch/trk_rhapi
using the rhapi.py
python script, which can be downloaded with the following command:
wget https://gitlab.cern.ch/cms-ph2-database/resthub-dev/-/raw/master/clients/python/src/main/python/rhapi.py
The script will ask for your lxplus
credentials when executed for the first time in order to connect to the database, storing them locally in .session.cache
file. Unless it's deleted, next time the script will without the login prompt.
You might need to install a few dependencies using pip
package manager for the script to work:
pip install requests ilock
The relevant WLT data is stored across three tables in the trker_cmsr
database for CROC
/CROC Proto
parts respectively:
-
c18200
/c13400
- values characterising the whole wafer and the corresponding probing run- each row corresponds to a single wafer identified by
PART_NAME_LABEL
(label of the wafer)
- each row corresponds to a single wafer identified by
-
c18220
/c13420
- values appearing in the wafer-wise histograms (1 value/chip)- each row corresponds to a single chip identified by
PART_NAME_LABEL
(label of the chip)
- each row corresponds to a single chip identified by
-
c18240
/c13440
- values from multi-point curves measured for each chip (multiple values/chip)- each row corresponds to a measurement point identified by
PART_NAME_LABEL
(label of the chip),CROC_DATA_ID
(name of the curve),X
(X coordinate value or index),Y
(Y coordinate value)
- each row corresponds to a measurement point identified by
Data is downloaded from DB using SQL queries and returned in CSV format. A convenient way of digesting it is to forward this output into a .csv
file and opening it with any compatible software, like Microsoft Excel, Apple Numbers, Google Sheets, etc.:
python rhapi.py -no -u https://cmsdca.cern.ch/trk_rhapi "<SQL query>" > data.csv
Example commands
Below a number of examples are given for the <SQL query>
that can be used in the above command.
- All book-keeping data for wafer
07D4
:
select w.* from trker_cmsr.c13400 w where w.PART_NAME_LABEL like '%07D4%'
- List of wafers tested with
CUT_VERSION = 1
:
select distinct w.PART_NAME_LABEL, w.CUT_VERSION from trker_cmsr.c13400 w where w.CUT_VERSION = 1
- All wafer-wise data for all the chips from wafer
07D4
:
select c.* from trker_cmsr.c13420 c where c.PART_NAME_LABEL like '%07D4%'
- All wafer-wise data for chip
19
from wafer07D4
:
select c.* from trker_cmsr.c13420 c where c.PART_NAME_LABEL like '%07D4_19%'
- EFUSE code and IREF trim code for all green chips from wafer
07D4
:
select c.PART_NAME_LABEL, c.EFUSE_CODE, c.IREF_TRIM_CODE from trker_cmsr.c13420 c where c.PART_NAME_LABEL like '%07D4%' and c.GRADE = 'green'
- All the ADC calibration points for chip
B7
from wafer14A3
:
select c.X, c.Y from trker_cmsr.c13440 c where c.PART_NAME_LABEL like '%14A3_B7%' and c.CROC_DATA_ID = 'ADC'
- All wafer-wise data for chips with efused ids (decimal)
2394
or2426
:
select c.* from trker_cmsr.c13420 c where c.EFUSE_CODE in (2394,2426)