calc_dot_states

static ThomasFermi.calc_dot_states(physics, islands, island_charges, charge_centers)

Calculates the state of each dot in the system.

The “islands”, which are determined by n(x), do not always match up nicely with the “dots”, which are predefined based on the layout of the gates.

This function attempts to determine whether each “dot” is occupied or combined, based on the locations and charges on each of the islands.

Dots are defined via physics.dot_regions. (If regions are not defined, defaults will be generated assuming an alternating pattern of barrier and plunger gates).

Parameters:
  • physics (PhysicsParameters) – The physical device parameters.

  • islands (ndarray[int]) – An array with shape (num_islands, 2) giving the islands, where islands[i] is a length-2 integer array [begin_index, end_index + 1] giving the indeces of physics.x corresponding to the island.

  • island_charges (ndarray[int]) – The charge configuration array which minimizes the capacitance energy. A 1D array with length equal to the number of islands specifying the integer number of charges on each island.

  • charge_centers (ndarray[float]) – An array with length equal to len[islands] giving the center of the charge distribution over each island.

Returns:

  • are_dots_occupied (ndarray[bool]) – An array of booleans, one for each dot, indicating whether each dot is occupied.

  • are_dots_combined (ndarray[bool]) – An array of booleans, one for each internal barrier, indicating whether the dots on each side are combined together (i.e. the barrier is too low). len(are_dots_combined) will always equal len(are_dots_occupied) - 1. are_dots_combined[i] is always false if either are_dots_occupied[i] or are_dots_occupied[i+1] is false. If both are true, are_dots_combined[i] may be true or false depending on the barrier height.

  • dot_charges (ndarray[int]) – An array of integers, one for each dot, indicating the total number of charges in each dot. In the case of combined dots, the total number of charges will be entered in the left-most dot, with the other dots padded with zeros.

Notes

There are several edge cases which can occur with a poor potential setup or a poor choice of dot_regions, where the dots and islands do not match up. They are handled as follows:

If an island with at least one charge lies between two dot regions, its charge will be added to the region which it is closer to.

If an island with at least one charge lies to the far left or far right of all dot regions, it will be ignored.

If a region has multiple islands (with charges) overlapping it, and these islands don’t overlap other regions, then charges from all the islands will be added together as if they were a single dot.

If a region has multiple islands (with charges) overlapping it, and at least one of these islands overlap one or more other regions, then that island will not be included as part of the region unless it overlaps the region by a greater area than any other island, or unless it is left with no other region to be associated with.