Scripts as written on 1991

This commit is contained in:
Emilia Allison 2024-10-24 13:59:10 -05:00
parent 7b98363a03
commit 7e244a55c5
Signed by: emilia
GPG Key ID: 05D5D1107E5100A1
2 changed files with 104 additions and 0 deletions

View File

@ -0,0 +1,88 @@
#Cellario modules
from HRB.Cellario.Scripting import *
from HRB.Cellario.Scripting.API import *
import json
from sys import argv
from os import path, listdir
from dataclasses import dataclass
def Execute(api : PythonScriptingApi):
available_barcodes = "C:/temp/availabletubes.txt"
letter_dir = "C:/temp/letters"
input = "EH"
available_tubes = read_available(available_barcodes)
letters = []
for letter in input:
x = get_tubes_for_letter(letter,
len(letters) + 1,
available_tubes,
letter_dir)
available_tubes = available_tubes[len(x):]
letters += x
output = letter_tubes_to_obj(letters)
api.Messaging.WriteDiagnostic(ScriptLogLevel.Normal, json.dumps(output))
list(api.CurrentRun.RunOrderParameters)[0].ParameterValue = json.dumps(output)
@dataclass(frozen=True)
class Tube:
barcode: str
row: int
col: int
@dataclass(frozen=True)
class LetterTube:
barcode: str
index: int
group: int
def letter_tubes_to_obj(x):
output = {}
output["Items"] = [{"BarcodeValue": y.barcode} for y in x]
output["TargetPositions"] = [{"PositionIndex": y.index,
"GroupIndex": y.group}
for y in x]
return output
def get_tubes_for_letter(letter: str,
letter_index: int,
available_tubes,
letter_dir: str):
positions = get_letter_positions(letter, letter_dir)
if len(positions) > len(available_tubes):
raise Exception("Insufficient tubes to fill order")
pixels = []
for i, position in enumerate(positions):
pixel = LetterTube(available_tubes[i],
position,
letter_index)
pixels.append(pixel)
return pixels
def read_available(p: str):
with open(p, 'r') as file:
return [x.strip() for x in file.readlines()]
def validate_word(input: str, letter_dir: str) -> bool:
letters_available = [x[0] for x in listdir(letter_dir)]
has_required_letters = all([x in letters_available for x in input])
return has_required_letters
def get_letter_positions(letter: str, letter_dir: str):
filename = [f for f in listdir(letter_dir) if f[0] == letter][0]
with open(path.join(letter_dir, filename), 'r') as file:
return [int(x.strip()) for x in file.readlines()]

View File

@ -0,0 +1,16 @@
#Cellario modules
from HRB.Cellario.Scripting import *
from HRB.Cellario.Scripting.API import *
import json
def Execute(api : PythonScriptingApi):
sampleName = api.CurrentPlate.Name
with open(f"C:/temp/{sampleName}.txt", "r") as file:
j = json.load(file)
tubes = j["tubeBarcode"]
barcodes = [tube["barcode"] for tube in tubes]
with open("C:/temp/availabletubes.txt","a") as file:
for barcode in barcodes:
file.write(f"{barcode}\n")