Coder Social home page Coder Social logo

flexsensor's Introduction

Flexsensor

An automation software for FormFactor Cascade Summit200 Probe Stations. FlexSensor is a software that allows to automate measurements using the FormFactor Wafer Prober.

FlexSensor is a standalone Python application. Its versatility allows for immediate deployment, without prior programming knowledge. Particularly noteworthy are its post-processing capabilities, however, the software's core functionality is the use of the automated measurement routine to acquire the resonant spectra of photonic devices, integrated within a specialized measurement system, as detailed in Section

Still under construction*

This repository is under construction. The software is ready for deplyoment but is still in beta. If you find any bugs or have any suggestions, please open an issue.

Installation

Get the source files

Clone the repository to your local machine.

git clone [email protected]:flexsensor-public/flexsensor.git

Create a virtual environment (highly recommended) and install the dependencies.

python -m venv .venv;
source .venv/Scripts/Activate;
pip install -r requirements.txt

Starting the software

To start the software, simply run the examples/main.py file.

python main.py

Defining a measurement routine

The measurement routine is defined in a python file. Each measurement routine must inherit from the BaseMeasurementRoutine class. Note that the base class has an overloaded constructor that requires the following parameters:

  • prober: The Prober.Controller object that is used to measure the structures
  • config: The FlexSensorConfig object that is used to measure the structures
import FlexSensor as fs

class MeasurementRoutine(fs.BaseMeasurementRoutine):

    def __init__(prober: Prober.Controller,
                 config: fs.FlexSensorConfig):
        super().__init__(prober, config)

    @Slot()
    def run(self): 
        # your code here

In the run method, the measurement routine is defined. The run method is called by the MeasurementRoutineThread class, which is a QThread object. This allows to run the method in a separate thread, while the GUI remains responsive.

Measuring using FlexSensor

It is often useful to measure a large number of structures on a wafer. For this, the software allows to define a measurement routine that is executed for each structure. The vas-File allows to define a list of structures that are measured. Thede file is parsed and passed to the MeasurementRoutine class.

import FlexSensor as fs
# ...
def readVasFile(self):
    self.parsed_file = fs.VASInputFileParser()
    
    selected_file, self.grouped_structures, self.bookmarks = self.parsed_file.read_file(
         input_file='structure_file.vas'
     )
# ...

The VASInputFileParser class parses the vas-File and returns a list of structures that are measured.

  • selected_file: The selected file. In case the file is not found, the user is prompted to select a file by a file dialog.
  • grouped_structures: A list of structures that are measured. Each structure is a python dictionary that contains the information on how to measure the structure.
  • bookmarks: A list of bookmarks that are defined in the vas-File. These bookmarks are used to create a Klayout bookmark file that can be used to navigate to the structures in Klayout.

Input Structure File

The measuring process relies on a vas-File that store the positions to the structures. in priciple this file os a list of python dictionary in a predefined format, that allows the easy definiton on how to measure the structures. The file allows python-style line comments using the #-sign

Comments and Bookmarks

# First structure to measure  
# group="mrr1"

Sometimes it is useful to have the Klayout-positions bookmarked. Using the Klayout-Coordinates, the software creates a readable Bookmark file that can be used in Klayout.

# Bookmark this view
mrr1_bookmark = { 'x_left': 19012, 'x_right' : 20708, 'y_bottom' : 20185, 'y_top': 21866 }

Defining a measurement point

Defining a measurement point requires the input position (x_in, y_in) and the output position (x_out, y_out). The keyword repetitions allows to define the number of repeated measurements of the same structure (e.g., for statistical evaluation, etc.)
These positions are relative and measured from a predefined point (See Sec ...) on how to select this point which can be chosen arbitrarily.

mrr1_ref = {'y_in' : -2120, 'x_in' : 960, 'y_out' : -2120, 'x_out' : -155, 'repetitions': 2}

Sometimes it is useful to define a group of measurement points that are equally spaced in x-direction. For this, the spacing and num-keyword can be used. Using these values, the software will automatically generate a list of num structures, equally spaced in x-direction using the spacing value.

mrr1     = {'y_in' : -1845, 'x_in' : 960, 'y_out' : -2015, 'x_out' : -155,  'num' : 6, 'spacing' : 100, 'repetitons': 200}

Setup before measuring

  1. Open the correct wafer map. Open the wafer Map under Velox -> WaferMap. Load the correct wafer file and select or deselect dies you do not want to capture. Note: Make sure that the die and wafer size is correct.
  2. Auto-Align the Wafer For this open the "AutoAlign" Wizard and find a suitable alignment structure.
  3. Place at "your" origin The structure file relies on "relative" positions to a point you find a suitable structur which is defined as the "die" origin. This is used to measure the distance to the to/be measured strcutures. Use the same mark in zour Klayout file and on the wafer. If you have not yet created a list for measuring your structure, you can use
  • the wafer prober find the right coordinates.
  • the KLayout-File for measuring the structures
  1. Set contact height Set our fiber to the correct height. Then use the "Set Contact height". Otherwise the measurement routine will fail!
  2. Train the Home Positions This step is crucial and needed to train the output positions.

Licence and usage

This software is licenced under the GNU GPL v3. If you use this software for your work or in your papers please cite me the following:

FAQ&Issues

This section should cover the issues that may occure during usage or development.

Installation issues and running

There are some combinations of pyside6 and pyqtgraph that may lead to incompatibility issues. Especially PySide 6.5.0 and pyqtgraph 0.13.2 installation lead to

TypeError: GraphicsWidgetAnchor.__init__() takes 1 positional argument but 2 were given

Solution: Remove your current installed pyqtgraph and install the latest version:

pip install git+https://github.com/pyqtgraph/pyqtgraph@master

flexsensor's People

Watchers

Christoph Schmidt avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.