import { createAssayMatrixTemplate } from './assayMatrixBuilder' import { createCalibrationCurveTemplate } from './calibrationCurveBuilder' import { createInstrumentRunTemplate } from './instrumentRunBuilder' import { createReagentListTemplate } from './reagentListBuilder' import { createSamplePrepTemplate } from './samplePrepBuilder' import { createSampleSheetTemplate } from './sampleSheetBuilder' import { presetSampleRecords } from './sampleNormalizers' import { firstFeatureName, normalizeInternalStandardReagents, normalizeMetaboliteFeatures, targetedMetabolomicsRunItems, } from './targetedMetabolomicsHelpers' import { createTemplateCollection } from './templateEnvelopes' import type { CreateTargetedMetabolomicsCollectionOptions, 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 createTargetedMetabolomicsCollection( options: CreateTargetedMetabolomicsCollectionOptions = {} ): TemplateCollectionEnvelope { const sampleRecords = presetSampleRecords(options.samples ?? ['S001', 'S002']) const responseUnit = options.responseUnit ?? 'peak area ratio' const concentrationUnit = options.concentrationUnit ?? 'uM' const metaboliteFeatures = normalizeMetaboliteFeatures( options.metabolites ?? ['Glucose', 'Lactate', 'Pyruvate'], responseUnit, ) const sampleSheet = createSampleSheetTemplate({ samples: sampleRecords }) const samplePrep = createSamplePrepTemplate({ samples: sampleRecords.map(sample => sample.sampleId), prepType: options.prepType ?? 'extraction', protocolName: 'Metabolomics sample preparation', outputVolume: options.outputVolume ?? 50, metadata: { assay: 'targeted-metabolomics' }, }) const reagents = createReagentListTemplate({ reagents: normalizeInternalStandardReagents( options.internalStandards ?? ['Stable isotope internal standard mix'], ), metadata: { assay: 'targeted-metabolomics' }, }) const calibrationCurve = createCalibrationCurveTemplate({ concentrations: options.standardConcentrations ?? [0.1, 1, 10, 100], analyte: options.calibrationAnalyte ?? firstFeatureName(metaboliteFeatures, 'Metabolite panel'), unit: concentrationUnit, responseUnit, model: 'linear-weighted-1-x', includeQc: options.includeQc, metadata: { assay: 'targeted-metabolomics' }, }) const instrumentRun = createInstrumentRunTemplate({ items: targetedMetabolomicsRunItems( sampleRecords, calibrationCurve.data.points, options.includeQc !== false, ), method: options.method ?? 'Targeted metabolomics', instrument: options.instrument ?? 'LC-MS', includeBlanks: false, includeQc: false, metadata: { assay: 'targeted-metabolomics' }, }) const assayMatrix = createAssayMatrixTemplate({ samples: sampleRecords.map(sample => ({ sampleId: sample.sampleId, name: sample.name, group: sample.group, metadata: sample.metadata ?? {}, })), features: metaboliteFeatures, metadata: { assay: 'targeted-metabolomics', responseUnit }, }) return createTemplateCollection( [sampleSheet, samplePrep, reagents, instrumentRun, calibrationCurve, assayMatrix], { preset: 'targeted-metabolomics', ...(options.metadata ?? {}) } ) }