DOI: 10.4121/20290026.v1
title: M4PP measurements data and the tools to analyze 2D materials

description: The data is included as a compressed .xz archive. A readme file is included, as well as the scripts to read out the data files.<br><strong>General</strong>This repository contains the M4PP measurement data and the tools to analyse this data. The raw measurements are found in the `measurements/` directory. The Python notebooks that parse this data are found in the `analysis/` directory. The majority of the data parsing is done by separate Python scripts, located in the `analysis/tools/` directory. These scripts are called from within the Python Notebooks.<br><br><strong>Requirements</strong>Here follows a list of software that was used to run the data analysis. Other versions of the same software may or may not be compatible.<br>- Python 3.9- Numpy- Scipy- Matplotlib- Jupyter Notebook- IPython<br>On Windows, [anaconda](https://www.anaconda.com/) contains functionality to select specific Python versions. On Unix environments, [pyenv](https://github.com/pyenv/pyenv) or [virtualenv](https://github.com/pypa/virtualenv) may be used to achieve the same behaviour.<br>The other requirements can be installed by running `pip install -r requirements.txt` in the root directory. Alternatively, they can be installed by hand.<br><strong>Recreating data and figures from the paper</strong>Figures 3a, 3b and 3c, as well as the numerical values for the mobilities, conductance minima and Dirac voltages were computed using the data and scripts in this repository. The script used to fabricate the mentioned figures is found in `analysis/figures.ipynb`. The numerical values originate from different samples and different measurements. Three notebooks corresponding to the four measured samples are also found in the `analyis/` directory. These are `slg-sio2.ipynb`, `slg-hbn.ipynb` and `mos2-sio2.ipynb`. Within these notebooks, each individual experiment is presented and analysed, including measurements not shown in the paper.<br>Please note that every performed measurement is provided within these notebooks. This includes measurements in non-optimal conditions, measurements with little to no contact, measurements with broken pins, et cetera. During our analysis, measurements with poor results were hidden by applying specific filters (most often $|\theta| &lt; 5$ or $|\theta| &lt; 20$). For the sake of showing all measurements, including failures, these filters have been removed. A phase filter can be reapplied by adding the following line to the `filters` list:```python ("phase", 5, lambda sto, com: np.abs(sto) &lt; com)```This line will add a $5\degree$ phase filter to every data point, voiding it if it is not within the bounds of the filter. By checking the amount of remaining data points, we kept or removed the measurement. Other filters can be applied too, by adding them to the `filters` list. Any property of the `Datapoint` class/instance can be filtered on (see `tools/data.py`, lines 162 - 173).<br> Within all measurements, a number of variables was changed throughout (for instance the current resistor Rcur or the location of the probe on the sample). As this is not clearly represented in the provided stats, care must be taken when comparing two different measurements to one another.<br>The simulation using the method of images, mentioned near the end of section III. A. can be found in `analysis/vdp_corfac.ipynb`.<br><br><strong>Analysing the data from scratch</strong>The SmartProber TT and the corresponding software were created to perform CIPT measurements. Additionally, a magnetic field could be introduced to perform these CIPT measurements as a function of the applied H-field. In our measurements, we made modifications (a larger current resistance and a gate bias) that the software was not aware of. As such, many of the values in the raw data files need to be considered with care. Some values, such as the `Field` value, need to be rescaled. Others, like `R` and `Sigma R` are completely invalid because the computations use incorrect values. In these cases, we must compute them from scratch (in this case, combine `Vi mon.` with the resistor metadata found in the `user info` field). Finally, some data must be ignored (the `sweep` header for instance). The provided tooling scripts fix all these problems such that the data can actually be analysed.<br>If, for whatever reason, the provided scripts do not suffice, it is possible to perform the required computation yourself. The `Datapoint` class found in `tools/data.py` houses all of the recomputed values and properties. The most important are `recompute_resistance()`, `bias`, `r_cur` and `v_set`. For VDP, the `to_vdp()` function within the same class also recomputes some values. This is mainly due to the difference in numerical factors for the measured resistances between an individual data point and that what we require to perform VDP. We will not delve further into how the raw data files must be interpreted beyond this.