Go to file
Emilia Allison a710054a98
Merge from import_from_csv feature branch
Of course, there were other features that got tacked on...
Squashed commit of the following:

commit 3ee3bd2dab
Author: Emilia <contact@emiliaallison.com>
Date:   Fri Dec 29 19:12:16 2023 -0500

    Superior clipboard manipulation

    Won't work on non-https connections, but actually works...

commit 08f647cd01
Author: Emilia <contact@emiliaallison.com>
Date:   Fri Dec 29 18:50:01 2023 -0500

    Utility for copying plates as image

commit 3456be2e9a
Author: Emilia <contact@emiliaallison.com>
Date:   Fri Dec 29 17:46:38 2023 -0500

    Change wording in options menu

    Father suggests that this wording is more clear to the end user.
    I agree!

commit 4c79cc0b4d
Author: Emilia <contact@emiliaallison.com>
Date:   Fri Dec 29 18:20:00 2023 -0500

    Set default plate format to 96 well

commit 056688c4ec
Author: Emilia <contact@emiliaallison.com>
Date:   Fri Dec 29 18:12:00 2023 -0500

    Implement in_transfer hashes toggle in plates

commit 4937d4ad28
Author: Emilia <contact@emiliaallison.com>
Date:   Fri Dec 29 18:11:00 2023 -0500

    Preferences menu and toggle for in_transfer hashes

commit 0101846b52
Author: Emilia <contact@emiliaallison.com>
Date:   Fri Dec 29 18:10:00 2023 -0500

    Add preferences struct to main state

commit ec37887c2f
Author: Emilia <contact@emiliaallison.com>
Date:   Fri Dec 29 18:05:00 2023 -0500

    Squashed commit of the following:

    commit 5e1137c460
    Author: Emilia <contact@emiliaallison.com>
    Date:   Fri Dec 29 18:03:00 2023 -0500

        Fix: indexing error w.r.t. logarithm argument

    commit 535b14a586
    Author: Emilia <contact@emiliaallison.com>
    Date:   Fri Dec 29 18:02:00 2023 -0500

        Space colors evenly, consistently, etc

        Colors should now:
        	- Not change if new transfers are added
        	- Be evenly spaced throughout the palette
        	- Be persistent across refreshes

    commit 6e08f47955
    Author: Emilia <contact@emiliaallison.com>
    Date:   Fri Dec 29 18:01:00 2023 -0500

        Add palette function for ordered ids

        Given an id and a list of sorted ids, yields a color

    commit 88e838e102
    Author: Emilia <contact@emiliaallison.com>
    Date:   Fri Dec 29 18:00:00 2023 -0500

        Switch to v7 UUIDs from v4

        v7 UUIDs are timestamp based and thus we can establish a useful
        total ordering over them; will base colors on this

commit 85d4b30d47
Author: Emilia <contact@emiliaallison.com>
Date:   Tue Oct 24 21:18:10 2023 -0400

    Update README.md

    Updated info about import/export, including the new Import Transfer from CSV feature.

commit 11a561c1d4
Author: Emilia <contact@emiliaallison.com>
Date:   Tue Oct 24 20:32:51 2023 -0400

    Add text to button

commit 562dc2adf6
Author: Emilia <contact@emiliaallison.com>
Date:   Tue Oct 24 20:32:40 2023 -0400

    Change to make colors more evenly distributed

commit 6b09aad289
Author: Emilia <contact@emiliaallison.com>
Date:   Tue Oct 24 19:27:02 2023 -0400

    Implementation 1

commit a9e5f05fd9
Author: Emilia <contact@emiliaallison.com>
Date:   Tue Oct 24 17:18:45 2023 -0400

    Hide parts of transfer menu when Custom transfer selected

commit db345bfbb5
Author: Emilia <contact@emiliaallison.com>
Date:   Tue Oct 24 17:18:08 2023 -0400

    delete weird whitespace from Cargo.toml

commit edcc3528aa
Author: Emilia <contact@emiliaallison.com>
Date:   Tue Oct 24 16:41:58 2023 -0400

    First implementation of custom region type

commit 9a3a10c8b4
Author: Emilia <contact@emiliaallison.com>
Date:   Tue Oct 24 16:21:30 2023 -0400

    Transfer region no longer copy
2023-12-29 20:58:52 -05:00
.cargo Persist state on reload 2023-05-22 20:48:17 -04:00
assets Merge from import_from_csv feature branch 2023-12-29 20:58:52 -05:00
src Merge from import_from_csv feature branch 2023-12-29 20:58:52 -05:00
.gitignore Initial 2023-05-11 17:49:03 -04:00
Cargo.lock Merge from import_from_csv feature branch 2023-12-29 20:58:52 -05:00
Cargo.toml Merge from import_from_csv feature branch 2023-12-29 20:58:52 -05:00
README.md Merge from import_from_csv feature branch 2023-12-29 20:58:52 -05:00
index.html Merge from import_from_csv feature branch 2023-12-29 20:58:52 -05:00

README.md

plate-tool (working title)

A web-based tool for creating assays for your favorite (acoustic) liquid handler.

Table of Contents

Usage

Adding plates

When you open plate tool for the first time, you'll be greeted by a message informing you that no plates are selected.

To add a new plate, click the "New Plate" button:

Once you've added at least one source plate and one destination plate, click one of each to select them. The right-most pane will now display these plates.

Modifying and deleting plates

Suppose you erroneously created a plate, or misspelled its name. Double click on that plate in the list (top-left pane) and a new modal will open. Here you can rename a plate or delete it.

Adding a transfer

Now that you have two plates selected, it's time to add a transfer. We can see all of the properties of our transfer in the bottom-left pane. You should first name your transfer (this name is only used for your reference, and is not passed to the liquid handler). You can enter your source and destination regions in their respective fields; the accepted format should be familiar—capital letters for the row and arabic numerals for the column.

However, it is much easier to click-and-drag the desired region. If we click and hold on a well (see right pane), that specifies our start well. Then, we can drag and subsequently release on our desired end well.

Our selected wells will be highlighted in light blue for our source plate and light red for our destination plate. You might also notice that some wells are hatched: this indicates wells that will be used in the transfer. Not all selected wells will necessarily be hatched, depending on the transfer type and interleave settings.

When all of the settings are to your liking, click the "Save" button. Note that it now appears in the "Transfers" section of the list pane.

Modifying and deleting transfers

If you already saved a transfer and would like to change it, click on its entry in the list. Now change the properties of the transfer as you did during initial creation. When finished, click the "Save" button to commit these changes.

If you no longer need a transfer, select it as above and then click the "Delete" button.

Importing and Exporting

Export as CSV

Exporting the transfers we have created to a CSV format is the primary (if not sole) usage of Plate Tool. To do so, first note the "File" tab at the top-left of the screen (above the list pane). Mouse over this tab, and a few more options will be revealed. We want to export: mouse over export and select "Export as CSV". You will be reminded that this is a one-way export (see JSON export/import below), and then prompted by your browser to select a location for your file.

Export as JSON (Saving Your Work)

Currently, it is not possible to export to a format produced by other similar software. However, you might reasonably want to save a copy of your work either as a backup or to share. Mouse over the "File" tab, then "Export" as above, then alternatively select "Export as JSON". Your browser will then prompt you to pick a suitable location to save your work as a file. (See note 1 below)

Import from JSON (Recovering Your Work)

If we want to import one such file, mouse over the "File" tab as before and select "Import", and finally click "Import from JSON". This opens a modal where you are prompted to upload (see note 2) your file; it will then be processed and loaded. Keep in mind that this will overwrite any work you currently have open, so you may wish to export first (see above).

Import Transfer from CSV (Using a picklist as a transfer)

If you have a CSV generated by another tool (or plate-tool), you can import it as a single transfer. To do so, mouse over the "File" tab, then "Import", and finally "Import Transfer from CSV". When creating transfers via this method, the transfer cannot be edited. This is useful if you have a pre-existing picklist that you would like to visualize in plate-tool.

Note 1: JSON files are plaintext! By default there is little whitespace (this makes comprehending them a challenge) but if we pass it through a "JSON Beautifier" (enter this into your search engine of choice) it immediately becomes more readable. It is encouraged (although by no means necessary) to take a look at your export; you will see that the representation here very closely mirrors the representation presented in Plate Tool.

Note 2: Use of the word "upload" might imply that your data is leaving your computer. It does not. You are welcome to verify (use your browser's developer tools, it should have a network tab) that this application does not "phone home". Your data is stored locally (unless you choose to export it and distribute it yourself).

Installation

Plate tool is hosted here for your convenience. However, you're absolutely welcome to host your own instance (even locally). Here's how: (Note: If you run Windows you're probably best off doing the following in WSL2)

  1. Make sure you have a working Rust toolchain
    1. Installing rustup is the easiest way to do this. See their website, or consult documentation provided by your distribution.
    2. Add the wasm32-unknown-unknown target with rustup target add wasm32-unknown-unknown
    • Generally, Rust's tools give descriptive errors and will help you solve problems yourself.
  2. Install trunk
    • Run cargo install --locked trunk
  3. Clone this repository using git
  4. Enter the project directory and run trunk serve
    • You may need to check where cargo is installing binaries by default. For me, they're at ~/.cargo/bin. If trunk is not automatically placed in your path, you would then run /your/path/to/.cargo/bin/trunk serve.
    • You can instead run trunk build --release for a more performant binary.