experimental library

Experimental lab protocols and Echo export functionality.

Provides export functionality for lab automation protocols, including Echo liquid handler integration, master mix calculations, PEG purification sheets, plate layout state, and PDF plate reports.

Classes

EchoCsvResult
Result of CSV generation for Echo liquid handler instructions.
EchoPlateWindow
HandleBarcodePainter
Draws the slat pictogram in each well for the echo output export report. Each handle is given a colored bar, which matches the handle's category.
MassFluorophoreEditResult
Result of a mass fluorophore edit operation.
MassManualEditResult
Result of a mass manual edit operation.
MasterMixConfig
User-configurable constants for master mix preparation calculations.
MasterMixResult
Result of master mix Excel generation, including any volume warnings.
PegPurificationConfig
Configuration for PEG purification helper sheet generation.
PegPurificationResult
Result of PEG purification Excel generation, including any warnings.
PlateActionBar
PlateBorderPainter
Paints a chamfered border stroke around the plate.
PlateChamferClipper
Clips content to the chamfered plate shape.
PlateColorKeyBar
PlateGrid
PlateHeaderBar
PlateLayoutState
Manages the assignment of slats to 96-well plates.
PlateUndoStack
Manages undo/redo history for plate layout changes, storing deep copies of PlateLayoutState. Just a nice convenience function for users.
SidebarSlatTile
SlatSidebar
WellConfig
Per-well configuration for Echo liquid handler dispensing parameters.
WellWidget
WellWidgetState

Enums

BufferSlatsMode
CoreStaplesMode
EchoWellColorMode
Color mode for echo well outlines — local to the echo plate window.

Constants

defaultCategoryColorHex → const int
echoChamferSize → const double
echoCollapsedHeight → const double
echoGridPadding → const double
echoHeaderCellSize → const double
echoMaxWellVolumeNl → const double
echoSidebarWidth → const double
echoWellHeight → const double
echoWellWidth → const double
echoWindowWidth → const double
emptyCategoryColorHex → const int
handleCategoryColors → const Map<String, int>
plateCols → const List<int>
plateRows → const List<String>

Functions

baseSlatId(String id) → String
Returns the base slat ID by stripping the ~N duplicate suffix.
buildChamferedPlatePath(Size size) → Path
Builds a chamfered plate path: 3 chamfered corners (H1 bottom-left, A12 top-right, H12 bottom-right) and 1 square corner (A1 top-left), matching Eppendorf twin-tec 96-well plate geometry.
buildPlateLayoutPdf(Map<int, Map<String, String?>> plateAssignments, Map<String, Slat> slats, {Map<int, String>? plateNames, Map<int, Map<String, WellConfig>>? wellConfigs, Map<String, Set<String>>? duplicateGroups, Map<String, Map<String, dynamic>>? layerMap, String experimentTitle = 'Experiment', EchoWellColorMode colorMode = EchoWellColorMode.natural, Color? resolveGroupColor(String slatId)?, Map<String, Set<(int, int)>>? manualHandles}) → Future<Uint8List>
categoryColor(String? category) → Color
Returns a color for direct use
designColorFor(Slat? slat, Map<String, Map<String, dynamic>> layerMap) → Color?
Compute design color for a slat based on unique color or layer color (legacy).
echoDesignColorFor(Slat? slat, Map<String, Map<String, dynamic>> layerMap, EchoWellColorMode colorMode, Color? resolveGroupColor(String slatId)?) → Color?
Computes the well outline color based on the selected echo color mode.
echoRoundedVolumeNl(double materialPerHandle, double concentration) → int
Rounds a raw volume in nL up to the nearest Echo-compatible 25 nL increment.
effectiveEchoHandleCategory(Map<String, dynamic>? handle) → String?
Returns the display category used by Echo barcode views and exports. Priority: fluorophore > blocked-as-flat > normal category.
generateEchoCsv({required Map<int, Map<String, String?>> plateAssignments, required Map<int, Map<String, WellConfig>> wellConfigs, required Map<int, String> plateNames, required Map<String, Slat> slats, required Map<String, Map<String, dynamic>> layerMap, bool normalizeVolumes = false, Map<String, Set<(int, int)>>? manualHandles}) EchoCsvResult
Generates Echo liquid handler CSV instructions from plate layout assignments.
generateMasterMixExcel({required Map<int, Map<String, String?>> plateAssignments, required Map<int, Map<String, WellConfig>> wellConfigs, required Map<int, String> plateNames, required Map<String, Slat> slats, required Map<String, Map<String, dynamic>> layerMap, required MasterMixConfig mixConfig, bool normalizeVolumes = false, double maxWellVolumeNl = 25000, String experimentTitle = 'Experiment', Map<String, Set<(int, int)>>? manualHandles}) MasterMixResult
Generates a master mix Excel workbook (.xlsx bytes) with per-slat-type sheets and horizontally-arranged recipe groups.
generatePegPurificationExcel({required Map<String, List<String>> groups, required Map<String, Slat> slats, required Map<String, Map<String, dynamic>> layerMap, required Map<int, Map<String, String?>> plateAssignments, required Map<int, Map<String, WellConfig>> wellConfigs, required Map<int, String> plateNames, required PegPurificationConfig pegConfig, required String experimentTitle, Map<String, Color>? groupColors}) PegPurificationResult
Generates a PEG purification helper sheet Excel workbook.
generatePlateLayout384() → List<String>
generatePlateLayout96() → List<String>
isDuplicateSlatId(String id) → bool
Returns true if the slat ID is a duplicate (has ~N suffix).
pdfCategoryColor(String? category) → PdfColor
Returns a color for use in PDF report generation
showExportSettingsDialog(BuildContext context, {required bool generatePdf, required bool generateCsv, required bool generateHelperSheets, required bool generatePegSheet, required bool normalizeVolumes, required double maxWellVolumeNl, required MasterMixConfig config, required PegPurificationConfig pegConfig}) → Future<({MasterMixConfig config, bool csv, bool helper, double maxWellVolumeNl, bool normalize, bool pdf, PegPurificationConfig pegConfig, bool pegSheet, bool runExport})?>
Shows the tabbed export settings dialog.
showManualHandleDialog(BuildContext context, {required Set<(int, int)> currentManualPositions, required bool mixedConfig, int maxLength = 32, Map<int, Map<String, dynamic>>? h5Handles, Map<int, Map<String, dynamic>>? h2Handles, bool multipleSlatsSelected = false, String? slatName}) → Future<Set<(int, int)>?>
Shows the manual handle marking dialog and returns the selected positions.
showMassFluorophoreDialog(BuildContext context, {required Map<String, Slat> slats, required Map<String, Fluorophore> fluorophorePalette, required String? activeFluorophore}) → Future<MassFluorophoreEditResult?>
Shows the mass fluorophore edit dialog.
showMassManualHandleDialog(BuildContext context, {required Map<String, Slat> slats, required PlateLayoutState layoutState}) → Future<MassManualEditResult?>
Shows the mass manual edit dialog.
showWellConfigDialog(BuildContext context, {String title = 'Configure Wells', WellConfig initial = const WellConfig(), double estimateVolumeNl(WellConfig config)?, double maxWellVolumeNl = 25000}) → Future<WellConfig?>
Shows a dialog to configure per-well Echo dispensing parameters.
slatCsvName(Slat slat, Map<String, Map<String, dynamic>> layerMap) → String
Returns a CSV-friendly component name for a slat in the format layer{N}-slat{number}.
slatDisplayName(Slat slat, Map<String, Map<String, dynamic>> layerMap, {Map<String, Slat>? slats}) → String
Returns a human-readable display name for a slat in the format L{layer}-{number}.
slatTotalVolumeNl(Slat slat, WellConfig config) → double
Computes the total rounded transfer volume (nL) for a slat given a well config.
sortSlatsForPlateAssignment(Map<String, Slat> slats, Map<String, Map<String, dynamic>> layerMap) → List<MapEntry<String, Slat>>
Sorts slats for plate assignment: excludes phantoms, orders by layer then numericID.
wellCol(String well) → int
wellName(int row, int col) → String
wellRow(String well) → int
wellWarningState(Slat slat, WellConfig? config, {double? maxVolumeNl, Set<(int, int)> manualPositions = const {}}) → ({bool exceedsVolume, bool incomplete})
Computes warning state for a well: placeholder handles and/or volume exceeded.