Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion StatusDB_views/x_flowcells/names/project_ids_list.map.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ function(doc) {
} else {
var proj_id = doc["samplesheet_csv"][sample]["Sample_Name"].split("_")[0]
}
proj_in_fc[proj_id] = true
// Test if it a valid project ID
if (/^P\d+$/.test(proj_id)) {
proj_in_fc[proj_id] = true
}
}
// NovaSeq X Plus has more digits in the date, will mess up the sorting if not adjusted
name_arr = doc["name"].split("_")
Expand Down
331 changes: 331 additions & 0 deletions seed_data/demux_configuration/config_v1.1.0.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,331 @@
{
"_id": "config_v1.1.0",
"type": "demux_configuration",
"version": "1.1.0",
"created_at": "2026-04-16T00:00:00.000Z",
"created_by": "johannes.alneberg",
"comment": "Initial configuration version - migrated from sample_classification_patterns.json",
"active": true,
"configuration": {
"$schema": "./sample_classification_patterns.schema.json",
"patterns": {
"tenx_single": {
"regex": "SI-(?:GA|NA)-[A-H][1-9][0-2]?",
"description": "10X single-index samples (e.g., ATAC, Gene Expression)",
"sample_type": "10X_SINGLE",
"umi_config": null,
"named_indices": "Chromium_10X_indexes",
"raw_samplesheet_settings": {
"TrimUMI": false
}
},
"tenx_dual": {
"regex": "SI-(?:TT|NT|NN|TN|TS)-[A-H][1-9][0-2]?",
"description": "10X dual-index samples (e.g., Spatial Transcriptomics)",
"sample_type": "10X_DUAL",
"umi_config": null,
"named_indices": "Chromium_10X_indexes"
},
"smartseq": {
"regex": "SMARTSEQ[1-9]?-[1-9][0-9]?[A-P]",
"description": "Smart-seq samples with plate-based indexing",
"sample_type": "SMARTSEQ",
"umi_config": null,
"named_indices": "Smart-seq3"
},
"idt_umi": {
"regex": "[ATCG]{4,}N+$",
"description": "IDT UMI samples - indices contain N for UMI positions",
"sample_type": "IDT_UMI",
"calculate_lengths": true,
"umi_config": {
"i7": {
"position": "end",
"length": "calculated"
}
}
},
"recipe": {
"regex": "[0-9]+-[0-9]+",
"description": "Recipe format pattern for read length specification"
}
},
"other_general_sample_types": {
"noindex": {
"description": "No-index samples",
"sample_type": "NOINDEX",
"umi_config": null
},
"standard": {
"description": "Standard samples without special classification",
"sample_type": "STANDARD",
"umi_config": null
}
},
"library_method_mapping": {
"10X Chromium: Multiome": {
"sample_type": "10X_SINGLE_MULTIOME",
"description": "Example library prep method mapping",
"umi_config": {
"i5": {
"position": "start",
"length": 24
}
},
"raw_samplesheet_settings": {
"TrimUMI": false,
"CreateFastqForIndexReads": true
},
"named_indices": "Chromium_10X_indexes"
}
},
"instrument_type_mapping": {
"NovaSeqXPlus": {
"description": "NovaSeq X Plus sequencer defaults",
"raw_samplesheet_settings": {
"BarcodeMismatchesIndex1": 1,
"BarcodeMismatchesIndex2": 1
},
"run_modes": {
"10B": {
"description": "10B flow cell mode",
"raw_samplesheet_settings": {
"BarcodeMismatchesIndex1": 2
}
},
"25B": {
"description": "25B flow cell mode"
}
}
},
"NovaSeq6000": {
"description": "NovaSeq 6000 sequencer defaults",
"raw_samplesheet_settings": {}
}
},
"bcl_convert_settings": {
"per_sample_settings": {
"Lane": {
"type": "integer",
"help": "Lane number as an integer, used internally to divide demultiplexing per lane.",
"mandatory": true
},
"Sample_ID": {
"type": "string",
"help": "Unique sample identifier, used to name output files and directories.",
"mandatory": true,
"can_be_left_blank": false
},
"index": {
"type": "string",
"regex": "^[ATCGN]+$",
"help": "i7 index sequence.",
"mandatory": true,
"can_be_left_blank": true
},
"index2": {
"type": "string",
"regex": "^[ATCGN]*$",
"help": "i5 index sequence.",
"mandatory": true,
"can_be_left_blank": true
},
"Sample_Project": {
"type": "string",
"help": "Project name associated with the sample.",
"mandatory": true,
"can_be_left_blank": true
},
"Sample_Name": {
"type": "string",
"help": "Human-readable sample name, can be used to name output files when using a certain combination of settings.",
"mandatory": false,
"can_be_left_blank": true
},
"OverrideCycles": {
"type": "string",
"help": "Override cycle settings for read lengths, index lengths, UMIs and so on, for example: R1:U7N1Y143;R2:U7N1Y143;I1:I8;I2:I8",
"mandatory": false,
"can_be_left_blank": false,
"can_be_on_BCLConvert_settings": true
},
"BarcodeMismatchesIndex1": {
"type": "integer",
"help": "Number of allowed mismatches for i7 index during demultiplexing (0,1 or 2).",
"regex": "^[0-2]$",
"mandatory": false,
"can_be_left_blank": false,
"can_be_on_BCLConvert_settings": true
},
"BarcodeMismatchesIndex2": {
"type": "integer",
"help": "Number of allowed mismatches for i5 index during demultiplexing (0,1 or 2).",
"regex": "^[0-2]$",
"mandatory": false,
"can_be_left_blank": false,
"can_be_on_BCLConvert_settings": true
}
},
"raw_samplesheet_settings": {
"TrimUMI": {
"type": "boolean",
"help": "If set to 'false', UMI sequences are not trimmed from output FASTQ reads. The UMI is still placed in sequence header. Can only be enabled (1) if a UMI is present for at least 1 sample according to the OverrideCycles setting.",
"default": true
},
"CreateFastqForIndexReads": {
"type": "boolean",
"help": "If set to 'true', output FASTQ files for index reads as well as genomic reads. Can only be enabled when an index is present and used for demultiplexing according to the index/index2 columns and the OverrideCycles setting.",
"default": false
},
"MinimumTrimmedReadLength": {
"type": "integer",
"help": "Reads trimmed below this point become masked at that point. Default is the minimum of 35 and the shortest non-indexed read length. Can only be specified when index 2 is present and used for demultiplexing for all samples according to the index column and the OverrideCycles setting.",
"default": 0
},
"MaskShortReads": {
"type": "integer",
"help": "Reads trimmed below this point become masked out. Default is the minimum of 22 and MinimumTrimmedReadLength.",
"default": 0
}
}
},
"control_patterns": [
"phix",
"control",
"blank",
"negative"
],
"samplesheet_generation_rules": {
"TrimUMI": [
{
"name": "exclude_for_idt_umi_with_no_umi_config",
"description": "IDT UMI samples where UMI calculation failed should not have TrimUMI set",
"conditions": {
"all_of": [
{
"field": "sample_type",
"operator": "equals",
"value": "IDT_UMI"
},
{
"field": "umi_config",
"operator": "is_null"
}
]
},
"action": "set_value",
"value": "EXCLUDE"
},
{
"name": "exclude_for_standard_without_umi",
"description": "Standard samples without UMI configuration should not have TrimUMI set",
"conditions": {
"all_of": [
{
"field": "sample_type",
"operator": "equals",
"value": "STANDARD"
},
{
"field": "umi_config",
"operator": "is_null"
}
]
},
"action": "set_value",
"value": "EXCLUDE"
},
{
"name": "exclude_for_noindex",
"description": "NoIndex samples have no indices where UMIs could be located",
"conditions": {
"all_of": [
{
"field": "sample_type",
"operator": "equals",
"value": "NOINDEX"
}
]
},
"action": "set_value",
"value": "EXCLUDE"
},
{
"name": "exclude_for_controls",
"description": "Control samples should not have UMI trimming applied",
"conditions": {
"all_of": [
{
"field": "sample_type",
"operator": "equals",
"value": "control"
}
]
},
"action": "set_value",
"value": "EXCLUDE"
}
],
"CreateFastqForIndexReads": [
{
"name": "exclude_for_noindex",
"description": "Cannot create index FASTQs when no indices are present",
"conditions": {
"all_of": [
{
"field": "sample_type",
"operator": "equals",
"value": "NOINDEX"
}
]
},
"action": "set_value",
"value": "EXCLUDE"
},
{
"name": "exclude_for_controls",
"description": "Control samples typically don't need index FASTQs",
"conditions": {
"all_of": [
{
"field": "sample_type",
"operator": "equals",
"value": "control"
}
]
},
"action": "set_value",
"value": "EXCLUDE"
}
],
"BarcodeMismatchesIndex1": [
{
"name": "zero_for_short_single_index",
"description": "Single-index samples with indices at or below the short_single_index_threshold need 0 mismatches to avoid collisions",
"conditions": {
"all_of": [
{
"field": "index1_length",
"operator": "less_than",
"value": 9
},
{
"field": "index2_length",
"operator": "equals",
"value": 0
},
{
"field": "sample_type",
"operator": "not_equals",
"value": "NOINDEX"
}
]
},
"action": "set_value",
"value": 0
}
]
},
"short_single_index_threshold": 8
}
}
Loading