import { createAssayMatrixTemplate } from './assayMatrixBuilder' import { idFromName } from './builderIdUtils' import { createProtocolStepsTemplate } from './protocolStepsBuilder' import { createReagentListTemplate } from './reagentListBuilder' import { createSampleSheetTemplate } from './sampleSheetBuilder' import { presetSampleRecords } from './sampleNormalizers' import { createTemplateCollection } from './templateEnvelopes' import type { CreateWesternBlotAssayCollectionOptions, TemplateCollectionEnvelope, } from './types' /** @deprecated Scheduled for removal from the core SDK in MINT 1.4; the biology templates move to a dedicated package or the owning plugins. */ export function createWesternBlotAssayCollection( options: CreateWesternBlotAssayCollectionOptions = {} ): TemplateCollectionEnvelope { const sampleRecords = presetSampleRecords(options.samples ?? ['Control', 'Treatment']) const loadingControl = options.loadingControl ?? 'ACTB' const targetNames = (options.targets ?? ['Target protein']).map(target => typeof target === 'string' ? target : target.name ?? target.id ) const featureNames = loadingControl && !targetNames.includes(loadingControl) ? [...targetNames, loadingControl] : targetNames const sampleSheet = createSampleSheetTemplate({ samples: sampleRecords }) const reagentList = createReagentListTemplate({ reagents: [ { id: 'primary-antibody', name: 'Primary antibody', kind: 'antibody', storageCondition: '4C' }, { id: 'secondary-antibody', name: 'Secondary antibody', kind: 'antibody', storageCondition: '4C' }, { id: 'lysis-buffer', name: 'Lysis buffer', kind: 'buffer', storageCondition: '4C' }, { id: 'blocking-buffer', name: 'Blocking buffer', kind: 'buffer', storageCondition: '4C' }, { id: 'wash-buffer', name: 'TBST wash buffer', kind: 'buffer', storageCondition: 'RT' }, { id: 'substrate', name: 'Detection substrate', kind: 'reagent', storageCondition: '4C' }, ], metadata: { assay: 'western-blot' }, }) const protocol = createProtocolStepsTemplate({ steps: [ { id: 'lyse-samples', type: 'addition', name: 'Lyse samples', duration: 30 }, { id: 'run-gel', type: 'custom', name: 'Run SDS-PAGE', duration: 90 }, { id: 'transfer', type: 'transfer', name: 'Transfer to membrane', duration: 60 }, { id: 'block', type: 'incubation', name: 'Block membrane', duration: 60 }, { id: 'primary-antibody', type: 'incubation', name: 'Primary antibody incubation', duration: 960 }, { id: 'secondary-antibody', type: 'incubation', name: 'Secondary antibody incubation', duration: 60 }, { id: 'detect', type: 'measurement', name: 'Detect and quantify bands', duration: 30 }, ], metadata: { assay: 'western-blot' }, }) const assayMatrix = createAssayMatrixTemplate({ samples: sampleRecords.map(sample => ({ sampleId: sample.sampleId, name: sample.name, group: sample.group, metadata: sample.metadata ?? {}, })), features: featureNames.map((feature, index) => ({ id: idFromName(feature, `feature-${index + 1}`), name: feature, type: 'protein', unit: 'relative intensity', metadata: { loadingControl: feature === loadingControl }, })), metadata: { assay: 'western-blot', loadingControl }, }) return createTemplateCollection( [sampleSheet, reagentList, protocol, assayMatrix], { preset: 'western-blot-assay', ...(options.metadata ?? {}) } ) }