cutseq 0.0.63__tar.gz → 0.0.64__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cutseq
3
- Version: 0.0.63
3
+ Version: 0.0.64
4
4
  Summary: Automatically cut adapter / barcode / UMI from NGS data
5
5
  Project-URL: Repository, https://github.com/y9c/cutseq
6
6
  Author-email: Ye Chang <yech1990@gmail.com>
@@ -0,0 +1,157 @@
1
+ # Built-in adapter schemes for cutseq
2
+
3
+ # RNA library
4
+
5
+ [SMALLRNA]
6
+ scheme = "AGTTCTACAGTCCGACGATC>AGATCGGAAGAGCACACGTC"
7
+ description_name = "Small RNA Libraries"
8
+ points = [
9
+ "Used for small RNA sequencing",
10
+ "Double ligation method",
11
+ "Forward orientation",
12
+ "Optional 2nt trimming on both ends for quality",
13
+ ]
14
+
15
+ [SMRNA]
16
+ scheme = "AGTTCTACAGTCCGACGATC>TGGAATTCTCGGGTGCCAAG"
17
+ description_name = "Small RNA (Legacy)"
18
+ points = [
19
+ "Legacy version for small RNA sequencing",
20
+ "Refer to library preparation protocol for details.",
21
+ ]
22
+
23
+ [INLINE]
24
+ scheme = "AGTTCTACAGTCCGACGATCNNNNN>NNNNN(ATCACG)AGATCGGAAGAGCACACGTC"
25
+ description_name = "Custom Barcoded Libraries"
26
+ points = [
27
+ "Used for libraries with inline barcodes",
28
+ "Dual UMI design (5nt each)",
29
+ "Forward orientation",
30
+ "Contains fixed inline barcode (ATCACG)",
31
+ ]
32
+
33
+ [TAKARAV2]
34
+ scheme = "ACACGACGCTCTTCCGATCTXXX<XXXAGATCGGAAGAGCACACGTC"
35
+ description_name = "Takara V2"
36
+ points = [
37
+ "Contains masked regions (XXX)",
38
+ "Refer to Takara V2 library preparation protocol for details.",
39
+ ]
40
+
41
+ [STRANDED]
42
+ scheme = "ACACGACGCTCTTCCGATCTX<XXXAGATCGGAAGAGCACACGTC"
43
+ description_name = "Stranded RNA"
44
+ points = [
45
+ "Contains masked regions (X, XXX)",
46
+ "Refer to stranded RNA library preparation protocol for details.",
47
+ ]
48
+
49
+ [UNSTRANDED]
50
+ scheme = "ACACGACGCTCTTCCGATCTXX-XXAGATCGGAAGAGCACACGTC"
51
+ description_name = "Unstranded RNA/DNA"
52
+ points = [
53
+ "Contains masked regions (XX)",
54
+ "Refer to library preparation protocol for details.",
55
+ ]
56
+
57
+ [TAKARAV3]
58
+ scheme = "ACACGACGCTCTTCCGATCTXXX<XXXXXXNNNNNNNNAGATCGGAAGAGCACACGTC"
59
+ description_name = "Takara V3"
60
+ points = [
61
+ "Contains masked regions (XXX, XXXXXX)",
62
+ "Contains UMI sequences (NNNNNNNN)",
63
+ "Refer to Takara V3 library preparation protocol for details.",
64
+ ]
65
+
66
+ [ECLIP6]
67
+ scheme = "ACACGACGCTCTTCCGATCTXX<XNNNNNNAGATCGGAAGAGCACACGTC"
68
+ description_name = "eCLIP (6nt UMI)"
69
+ points = [
70
+ "Contains masked regions (XX, X)",
71
+ "Contains UMI sequences (NNNNNN)",
72
+ "Used for eCLIP experiments with a 6-nucleotide UMI.",
73
+ ]
74
+
75
+ [ECLIP10]
76
+ scheme = "ACACGACGCTCTTCCGATCTXX<XNNNNNNNNNNAGATCGGAAGAGCACACGTC"
77
+ description_name = "eCLIP (10nt UMI)"
78
+ points = [
79
+ "Contains masked regions (XX, X)",
80
+ "Contains UMI sequences (NNNNNNNNNN)",
81
+ "Used for eCLIP experiments with a 10-nucleotide UMI.",
82
+ ]
83
+
84
+ [SACSEQ]
85
+ scheme = "ACACGACGCTCTTCCGATCT<XXXXNNNNNNAGATCGGAAGAGCACACGTC"
86
+ description_name = "SAC-Seq"
87
+ points = [
88
+ "Contains masked regions (XXXX)",
89
+ "Contains UMI sequences (NNNNNN)",
90
+ "Used for SAC-Seq (Single-cell RNA-Seq) or similar protocols.",
91
+ ]
92
+
93
+ [SACSEQV3]
94
+ scheme = "ACACGACGCTCTTCCGATCTNNNNNNNNX>XXNNNNNNNNAGATCGGAAGAGCACACGTC"
95
+ description_name = "SAC-Seq V3"
96
+ points = [
97
+ "Contains masked regions (X, XX)",
98
+ "Contains dual UMI sequences (NNNNNNNN on both sides)",
99
+ "Refer to SAC-Seq V3 library preparation protocol for details.",
100
+ ]
101
+
102
+ [XGENRNA]
103
+ scheme = "ACACGACGCTCTTCCGATCTXXXXXX<XXXXXXXXXXXXXXXAGATCGGAAGAGCACACGTC"
104
+ description_name = "xGen RNA"
105
+ points = [
106
+ "Contains extensive masked regions (XXXXXX, XXXXXXXXXXXXXXX)",
107
+ "Likely for specific xGen RNA library preps, check protocol.",
108
+ ]
109
+
110
+ [ILLUMINARNA]
111
+ scheme = "AGATGTGTATAAGAGACAG<CTGTCTCTTATACACATCT"
112
+ description_name = "Illumina Stranded RNA (Nextera-based)"
113
+ points = ["Uses Nextera-style adapter sequences."]
114
+
115
+ # DNA library
116
+
117
+ [DSLIGATION]
118
+ scheme = "ACACGACGCTCTTCCGATCT>AGATCGGAAGAGCACACGTC"
119
+ description_name = "dsDNA Ligation"
120
+ points = [
121
+ "Basic dsDNA ligation with A-tailing",
122
+ "No UMIs or special trimming needed",
123
+ ]
124
+
125
+ # xGenDNA = "ACACGACGCTCTTCCGATCTXXX>(CCCCCCCCCCCCCCCCCCCC;noninternal;e=0.5;o=1)AGATCGGAAGAGCACACGTC" # Commented out
126
+
127
+ [XGENMETHY]
128
+ scheme = "ACACGACGCTCTTCCGATCTXX>XXXXXXXXXXAGATCGGAAGAGCACACGTC"
129
+ description_name = "xGen Methyl-Seq"
130
+ points = [
131
+ "Contains masked regions (XX, XXXXXXXXXX)",
132
+ "Designed for xGen Methyl-Seq library kits.",
133
+ ]
134
+
135
+ [XGENSNMC]
136
+ scheme = "ACACGACGCTCTTCCGATCTXXXXXX>XXXXXXXXXXXXXXXAGATCGGAAGAGCACACGTC"
137
+ description_name = "xGen snmC-Seq"
138
+ points = [
139
+ "Contains extensive masked regions (XXXXXX, XXXXXXXXXXXXXXX)",
140
+ "Designed for xGen single-nucleus methylC-Seq (snmC-Seq) library kits.",
141
+ ]
142
+
143
+ [PBAT]
144
+ scheme = "ACACGACGCTCTTCCGATCTXXXXXX<XXXXXXAGATCGGAAGAGCACACGTC"
145
+ description_name = "PBAT (Post-Bisulfite Adapter Tagging)"
146
+ points = [
147
+ "Contains masked regions (XXXXXX on both sides)",
148
+ "Used for PBAT-style bisulfite sequencing libraries.",
149
+ ]
150
+
151
+ [NEXTERA]
152
+ scheme = "AGATGTGTATAAGAGACAG>CTGTCTCTTATACACATCT"
153
+ description_name = "Nextera (General)"
154
+ points = [
155
+ "Standard Nextera transposase-based library preparation.",
156
+ "No UMIs by default in this basic scheme.",
157
+ ]
@@ -993,7 +993,7 @@ def main():
993
993
  args.adapter_scheme = BUILDIN_ADAPTERS.get(args.adapter_name.upper())
994
994
  if args.adapter_scheme is None:
995
995
  logging.error(
996
- f"Adapter name '{args.adapter_name}' is not valid. Check available --adapter-name choices or provide an --adapter-scheme."
996
+ f"Adapter name '{args.adapter_name} not found in built-in adapters."
997
997
  )
998
998
  # sys.exit(1) # Consider exiting if a bad name is given and no scheme
999
999
  # For now, allow fallback to adapter_scheme = adapter_name if not found
@@ -0,0 +1,140 @@
1
+ # Adapter Schemes
2
+ This file is auto-generated by `scripts/update_adapter_docs.py`. Do not edit manually.
3
+
4
+ This document lists the built-in adapter schemes available in `cutseq`. These can be used with the `-A` or `--adapter-name` option in the `cutseq run` command.
5
+
6
+ ### SMALLRNA (Small RNA Libraries)
7
+
8
+ <div class="adapter-scheme" style="margin-bottom: 15px; position: relative;"><div class="copy-scheme-raw" style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto; cursor: pointer; background: #f8f8f8; transition: box-shadow 0.2s;" title="Click to copy scheme: AGTTCTACAGTCCGACGATC>AGATCGGAAGAGCACACGTC" data-scheme="AGTTCTACAGTCCGACGATC>AGATCGGAAGAGCACACGTC"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGTTCTACAGTCCGACGATC</span><div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;"><div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div><span style="position: relative; z-index: 1; color: white; font-weight: bold;">></span></div><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div><div class="scheme-raw-tooltip" style="display:none; position:absolute; top:-30px; left:0; background:#222; color:#fff; padding:3px 8px; border-radius:4px; font-size:12px; z-index:10;">Copied!</div></div>
9
+ - Used for small RNA sequencing
10
+ - Double ligation method
11
+ - Forward orientation
12
+ - Optional 2nt trimming on both ends for quality
13
+
14
+ ---
15
+ ### SMRNA (Small RNA (Legacy))
16
+
17
+ <div class="adapter-scheme" style="margin-bottom: 15px; position: relative;"><div class="copy-scheme-raw" style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto; cursor: pointer; background: #f8f8f8; transition: box-shadow 0.2s;" title="Click to copy scheme: AGTTCTACAGTCCGACGATC>TGGAATTCTCGGGTGCCAAG" data-scheme="AGTTCTACAGTCCGACGATC>TGGAATTCTCGGGTGCCAAG"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGTTCTACAGTCCGACGATC</span><div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;"><div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div><span style="position: relative; z-index: 1; color: white; font-weight: bold;">></span></div><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">TGGAATTCTCGGGTGCCAAG</span></div><div class="scheme-raw-tooltip" style="display:none; position:absolute; top:-30px; left:0; background:#222; color:#fff; padding:3px 8px; border-radius:4px; font-size:12px; z-index:10;">Copied!</div></div>
18
+ - Legacy version for small RNA sequencing
19
+ - Refer to library preparation protocol for details.
20
+
21
+ ---
22
+ ### INLINE (Custom Barcoded Libraries)
23
+
24
+ <div class="adapter-scheme" style="margin-bottom: 15px; position: relative;"><div class="copy-scheme-raw" style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto; cursor: pointer; background: #f8f8f8; transition: box-shadow 0.2s;" title="Click to copy scheme: AGTTCTACAGTCCGACGATCNNNNN>NNNNN(ATCACG)AGATCGGAAGAGCACACGTC" data-scheme="AGTTCTACAGTCCGACGATCNNNNN>NNNNN(ATCACG)AGATCGGAAGAGCACACGTC"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGTTCTACAGTCCGACGATC</span><span style="background-color: #B2EBF2; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">NNNNN</span><div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;"><div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div><span style="position: relative; z-index: 1; color: white; font-weight: bold;">></span></div><span style="background-color: #B2EBF2; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">NNNNN</span><span style="background-color: #FFD700; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ATCACG</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div><div class="scheme-raw-tooltip" style="display:none; position:absolute; top:-30px; left:0; background:#222; color:#fff; padding:3px 8px; border-radius:4px; font-size:12px; z-index:10;">Copied!</div></div>
25
+ - Used for libraries with inline barcodes
26
+ - Dual UMI design (5nt each)
27
+ - Forward orientation
28
+ - Contains fixed inline barcode (ATCACG)
29
+
30
+ ---
31
+ ### TAKARAV2 (Takara V2)
32
+
33
+ <div class="adapter-scheme" style="margin-bottom: 15px; position: relative;"><div class="copy-scheme-raw" style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto; cursor: pointer; background: #f8f8f8; transition: box-shadow 0.2s;" title="Click to copy scheme: ACACGACGCTCTTCCGATCTXXX<XXXAGATCGGAAGAGCACACGTC" data-scheme="ACACGACGCTCTTCCGATCTXXX<XXXAGATCGGAAGAGCACACGTC"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXX</span><div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;"><div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div><span style="position: relative; z-index: 1; color: white; font-weight: bold;"><</span></div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXX</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div><div class="scheme-raw-tooltip" style="display:none; position:absolute; top:-30px; left:0; background:#222; color:#fff; padding:3px 8px; border-radius:4px; font-size:12px; z-index:10;">Copied!</div></div>
34
+ - Contains masked regions (XXX)
35
+ - Refer to Takara V2 library preparation protocol for details.
36
+
37
+ ---
38
+ ### STRANDED (Stranded RNA)
39
+
40
+ <div class="adapter-scheme" style="margin-bottom: 15px; position: relative;"><div class="copy-scheme-raw" style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto; cursor: pointer; background: #f8f8f8; transition: box-shadow 0.2s;" title="Click to copy scheme: ACACGACGCTCTTCCGATCTX<XXXAGATCGGAAGAGCACACGTC" data-scheme="ACACGACGCTCTTCCGATCTX<XXXAGATCGGAAGAGCACACGTC"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">X</span><div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;"><div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div><span style="position: relative; z-index: 1; color: white; font-weight: bold;"><</span></div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXX</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div><div class="scheme-raw-tooltip" style="display:none; position:absolute; top:-30px; left:0; background:#222; color:#fff; padding:3px 8px; border-radius:4px; font-size:12px; z-index:10;">Copied!</div></div>
41
+ - Contains masked regions (X, XXX)
42
+ - Refer to stranded RNA library preparation protocol for details.
43
+
44
+ ---
45
+ ### UNSTRANDED (Unstranded RNA/DNA)
46
+
47
+ <div class="adapter-scheme" style="margin-bottom: 15px; position: relative;"><div class="copy-scheme-raw" style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto; cursor: pointer; background: #f8f8f8; transition: box-shadow 0.2s;" title="Click to copy scheme: ACACGACGCTCTTCCGATCTXX-XXAGATCGGAAGAGCACACGTC" data-scheme="ACACGACGCTCTTCCGATCTXX-XXAGATCGGAAGAGCACACGTC"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XX</span><div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;"><div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div><span style="position: relative; z-index: 1; color: white; font-weight: bold;">-</span></div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XX</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div><div class="scheme-raw-tooltip" style="display:none; position:absolute; top:-30px; left:0; background:#222; color:#fff; padding:3px 8px; border-radius:4px; font-size:12px; z-index:10;">Copied!</div></div>
48
+ - Contains masked regions (XX)
49
+ - Refer to library preparation protocol for details.
50
+
51
+ ---
52
+ ### TAKARAV3 (Takara V3)
53
+
54
+ <div class="adapter-scheme" style="margin-bottom: 15px; position: relative;"><div class="copy-scheme-raw" style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto; cursor: pointer; background: #f8f8f8; transition: box-shadow 0.2s;" title="Click to copy scheme: ACACGACGCTCTTCCGATCTXXX<XXXXXXNNNNNNNNAGATCGGAAGAGCACACGTC" data-scheme="ACACGACGCTCTTCCGATCTXXX<XXXXXXNNNNNNNNAGATCGGAAGAGCACACGTC"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXX</span><div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;"><div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div><span style="position: relative; z-index: 1; color: white; font-weight: bold;"><</span></div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXXXXX</span><span style="background-color: #B2EBF2; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">NNNNNNNN</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div><div class="scheme-raw-tooltip" style="display:none; position:absolute; top:-30px; left:0; background:#222; color:#fff; padding:3px 8px; border-radius:4px; font-size:12px; z-index:10;">Copied!</div></div>
55
+ - Contains masked regions (XXX, XXXXXX)
56
+ - Contains UMI sequences (NNNNNNNN)
57
+ - Refer to Takara V3 library preparation protocol for details.
58
+
59
+ ---
60
+ ### ECLIP6 (eCLIP (6nt UMI))
61
+
62
+ <div class="adapter-scheme" style="margin-bottom: 15px; position: relative;"><div class="copy-scheme-raw" style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto; cursor: pointer; background: #f8f8f8; transition: box-shadow 0.2s;" title="Click to copy scheme: ACACGACGCTCTTCCGATCTXX<XNNNNNNAGATCGGAAGAGCACACGTC" data-scheme="ACACGACGCTCTTCCGATCTXX<XNNNNNNAGATCGGAAGAGCACACGTC"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XX</span><div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;"><div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div><span style="position: relative; z-index: 1; color: white; font-weight: bold;"><</span></div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">X</span><span style="background-color: #B2EBF2; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">NNNNNN</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div><div class="scheme-raw-tooltip" style="display:none; position:absolute; top:-30px; left:0; background:#222; color:#fff; padding:3px 8px; border-radius:4px; font-size:12px; z-index:10;">Copied!</div></div>
63
+ - Contains masked regions (XX, X)
64
+ - Contains UMI sequences (NNNNNN)
65
+ - Used for eCLIP experiments with a 6-nucleotide UMI.
66
+
67
+ ---
68
+ ### ECLIP10 (eCLIP (10nt UMI))
69
+
70
+ <div class="adapter-scheme" style="margin-bottom: 15px; position: relative;"><div class="copy-scheme-raw" style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto; cursor: pointer; background: #f8f8f8; transition: box-shadow 0.2s;" title="Click to copy scheme: ACACGACGCTCTTCCGATCTXX<XNNNNNNNNNNAGATCGGAAGAGCACACGTC" data-scheme="ACACGACGCTCTTCCGATCTXX<XNNNNNNNNNNAGATCGGAAGAGCACACGTC"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XX</span><div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;"><div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div><span style="position: relative; z-index: 1; color: white; font-weight: bold;"><</span></div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">X</span><span style="background-color: #B2EBF2; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">NNNNNNNNNN</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div><div class="scheme-raw-tooltip" style="display:none; position:absolute; top:-30px; left:0; background:#222; color:#fff; padding:3px 8px; border-radius:4px; font-size:12px; z-index:10;">Copied!</div></div>
71
+ - Contains masked regions (XX, X)
72
+ - Contains UMI sequences (NNNNNNNNNN)
73
+ - Used for eCLIP experiments with a 10-nucleotide UMI.
74
+
75
+ ---
76
+ ### SACSEQ (SAC-Seq)
77
+
78
+ <div class="adapter-scheme" style="margin-bottom: 15px; position: relative;"><div class="copy-scheme-raw" style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto; cursor: pointer; background: #f8f8f8; transition: box-shadow 0.2s;" title="Click to copy scheme: ACACGACGCTCTTCCGATCT<XXXXNNNNNNAGATCGGAAGAGCACACGTC" data-scheme="ACACGACGCTCTTCCGATCT<XXXXNNNNNNAGATCGGAAGAGCACACGTC"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;"><div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div><span style="position: relative; z-index: 1; color: white; font-weight: bold;"><</span></div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXXX</span><span style="background-color: #B2EBF2; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">NNNNNN</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div><div class="scheme-raw-tooltip" style="display:none; position:absolute; top:-30px; left:0; background:#222; color:#fff; padding:3px 8px; border-radius:4px; font-size:12px; z-index:10;">Copied!</div></div>
79
+ - Contains masked regions (XXXX)
80
+ - Contains UMI sequences (NNNNNN)
81
+ - Used for SAC-Seq (Single-cell RNA-Seq) or similar protocols.
82
+
83
+ ---
84
+ ### SACSEQV3 (SAC-Seq V3)
85
+
86
+ <div class="adapter-scheme" style="margin-bottom: 15px; position: relative;"><div class="copy-scheme-raw" style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto; cursor: pointer; background: #f8f8f8; transition: box-shadow 0.2s;" title="Click to copy scheme: ACACGACGCTCTTCCGATCTNNNNNNNNX>XXNNNNNNNNAGATCGGAAGAGCACACGTC" data-scheme="ACACGACGCTCTTCCGATCTNNNNNNNNX>XXNNNNNNNNAGATCGGAAGAGCACACGTC"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #B2EBF2; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">NNNNNNNN</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">X</span><div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;"><div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div><span style="position: relative; z-index: 1; color: white; font-weight: bold;">></span></div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XX</span><span style="background-color: #B2EBF2; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">NNNNNNNN</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div><div class="scheme-raw-tooltip" style="display:none; position:absolute; top:-30px; left:0; background:#222; color:#fff; padding:3px 8px; border-radius:4px; font-size:12px; z-index:10;">Copied!</div></div>
87
+ - Contains masked regions (X, XX)
88
+ - Contains dual UMI sequences (NNNNNNNN on both sides)
89
+ - Refer to SAC-Seq V3 library preparation protocol for details.
90
+
91
+ ---
92
+ ### XGENRNA (xGen RNA)
93
+
94
+ <div class="adapter-scheme" style="margin-bottom: 15px; position: relative;"><div class="copy-scheme-raw" style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto; cursor: pointer; background: #f8f8f8; transition: box-shadow 0.2s;" title="Click to copy scheme: ACACGACGCTCTTCCGATCTXXXXXX<XXXXXXXXXXXXXXXAGATCGGAAGAGCACACGTC" data-scheme="ACACGACGCTCTTCCGATCTXXXXXX<XXXXXXXXXXXXXXXAGATCGGAAGAGCACACGTC"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXXXXX</span><div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;"><div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div><span style="position: relative; z-index: 1; color: white; font-weight: bold;"><</span></div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXXXXXXXXXXXXXX</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div><div class="scheme-raw-tooltip" style="display:none; position:absolute; top:-30px; left:0; background:#222; color:#fff; padding:3px 8px; border-radius:4px; font-size:12px; z-index:10;">Copied!</div></div>
95
+ - Contains extensive masked regions (XXXXXX, XXXXXXXXXXXXXXX)
96
+ - Likely for specific xGen RNA library preps, check protocol.
97
+
98
+ ---
99
+ ### ILLUMINARNA (Illumina Stranded RNA (Nextera-based))
100
+
101
+ <div class="adapter-scheme" style="margin-bottom: 15px; position: relative;"><div class="copy-scheme-raw" style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto; cursor: pointer; background: #f8f8f8; transition: box-shadow 0.2s;" title="Click to copy scheme: AGATGTGTATAAGAGACAG<CTGTCTCTTATACACATCT" data-scheme="AGATGTGTATAAGAGACAG<CTGTCTCTTATACACATCT"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATGTGTATAAGAGACAG</span><div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;"><div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div><span style="position: relative; z-index: 1; color: white; font-weight: bold;"><</span></div><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">CTGTCTCTTATACACATCT</span></div><div class="scheme-raw-tooltip" style="display:none; position:absolute; top:-30px; left:0; background:#222; color:#fff; padding:3px 8px; border-radius:4px; font-size:12px; z-index:10;">Copied!</div></div>
102
+ - Uses Nextera-style adapter sequences.
103
+
104
+ ---
105
+ ### DSLIGATION (dsDNA Ligation)
106
+
107
+ <div class="adapter-scheme" style="margin-bottom: 15px; position: relative;"><div class="copy-scheme-raw" style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto; cursor: pointer; background: #f8f8f8; transition: box-shadow 0.2s;" title="Click to copy scheme: ACACGACGCTCTTCCGATCT>AGATCGGAAGAGCACACGTC" data-scheme="ACACGACGCTCTTCCGATCT>AGATCGGAAGAGCACACGTC"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;"><div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div><span style="position: relative; z-index: 1; color: white; font-weight: bold;">></span></div><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div><div class="scheme-raw-tooltip" style="display:none; position:absolute; top:-30px; left:0; background:#222; color:#fff; padding:3px 8px; border-radius:4px; font-size:12px; z-index:10;">Copied!</div></div>
108
+ - Basic dsDNA ligation with A-tailing
109
+ - No UMIs or special trimming needed
110
+
111
+ ---
112
+ ### XGENMETHY (xGen Methyl-Seq)
113
+
114
+ <div class="adapter-scheme" style="margin-bottom: 15px; position: relative;"><div class="copy-scheme-raw" style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto; cursor: pointer; background: #f8f8f8; transition: box-shadow 0.2s;" title="Click to copy scheme: ACACGACGCTCTTCCGATCTXX>XXXXXXXXXXAGATCGGAAGAGCACACGTC" data-scheme="ACACGACGCTCTTCCGATCTXX>XXXXXXXXXXAGATCGGAAGAGCACACGTC"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XX</span><div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;"><div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div><span style="position: relative; z-index: 1; color: white; font-weight: bold;">></span></div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXXXXXXXXX</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div><div class="scheme-raw-tooltip" style="display:none; position:absolute; top:-30px; left:0; background:#222; color:#fff; padding:3px 8px; border-radius:4px; font-size:12px; z-index:10;">Copied!</div></div>
115
+ - Contains masked regions (XX, XXXXXXXXXX)
116
+ - Designed for xGen Methyl-Seq library kits.
117
+
118
+ ---
119
+ ### XGENSNMC (xGen snmC-Seq)
120
+
121
+ <div class="adapter-scheme" style="margin-bottom: 15px; position: relative;"><div class="copy-scheme-raw" style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto; cursor: pointer; background: #f8f8f8; transition: box-shadow 0.2s;" title="Click to copy scheme: ACACGACGCTCTTCCGATCTXXXXXX>XXXXXXXXXXXXXXXAGATCGGAAGAGCACACGTC" data-scheme="ACACGACGCTCTTCCGATCTXXXXXX>XXXXXXXXXXXXXXXAGATCGGAAGAGCACACGTC"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXXXXX</span><div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;"><div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div><span style="position: relative; z-index: 1; color: white; font-weight: bold;">></span></div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXXXXXXXXXXXXXX</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div><div class="scheme-raw-tooltip" style="display:none; position:absolute; top:-30px; left:0; background:#222; color:#fff; padding:3px 8px; border-radius:4px; font-size:12px; z-index:10;">Copied!</div></div>
122
+ - Contains extensive masked regions (XXXXXX, XXXXXXXXXXXXXXX)
123
+ - Designed for xGen single-nucleus methylC-Seq (snmC-Seq) library kits.
124
+
125
+ ---
126
+ ### PBAT (PBAT (Post-Bisulfite Adapter Tagging))
127
+
128
+ <div class="adapter-scheme" style="margin-bottom: 15px; position: relative;"><div class="copy-scheme-raw" style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto; cursor: pointer; background: #f8f8f8; transition: box-shadow 0.2s;" title="Click to copy scheme: ACACGACGCTCTTCCGATCTXXXXXX<XXXXXXAGATCGGAAGAGCACACGTC" data-scheme="ACACGACGCTCTTCCGATCTXXXXXX<XXXXXXAGATCGGAAGAGCACACGTC"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXXXXX</span><div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;"><div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div><span style="position: relative; z-index: 1; color: white; font-weight: bold;"><</span></div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXXXXX</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div><div class="scheme-raw-tooltip" style="display:none; position:absolute; top:-30px; left:0; background:#222; color:#fff; padding:3px 8px; border-radius:4px; font-size:12px; z-index:10;">Copied!</div></div>
129
+ - Contains masked regions (XXXXXX on both sides)
130
+ - Used for PBAT-style bisulfite sequencing libraries.
131
+
132
+ ---
133
+ ### NEXTERA (Nextera (General))
134
+
135
+ <div class="adapter-scheme" style="margin-bottom: 15px; position: relative;"><div class="copy-scheme-raw" style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto; cursor: pointer; background: #f8f8f8; transition: box-shadow 0.2s;" title="Click to copy scheme: AGATGTGTATAAGAGACAG>CTGTCTCTTATACACATCT" data-scheme="AGATGTGTATAAGAGACAG>CTGTCTCTTATACACATCT"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATGTGTATAAGAGACAG</span><div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;"><div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div><span style="position: relative; z-index: 1; color: white; font-weight: bold;">></span></div><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">CTGTCTCTTATACACATCT</span></div><div class="scheme-raw-tooltip" style="display:none; position:absolute; top:-30px; left:0; background:#222; color:#fff; padding:3px 8px; border-radius:4px; font-size:12px; z-index:10;">Copied!</div></div>
136
+ - Standard Nextera transposase-based library preparation.
137
+ - No UMIs by default in this basic scheme.
138
+
139
+ ---
140
+ <script>(function() { function showTooltip(el) { var tooltip = el.parentElement.querySelector(".scheme-raw-tooltip"); if (tooltip) { tooltip.style.display = "block"; setTimeout(function() { tooltip.style.display = "none"; }, 1200); } } document.querySelectorAll(".copy-scheme-raw").forEach(function(block) { block.addEventListener("mouseenter", function() { block.style.boxShadow = "0 0 0 2px #FF6F61"; }); block.addEventListener("mouseleave", function() { block.style.boxShadow = ""; }); block.addEventListener("click", function(e) { var scheme = block.getAttribute("data-scheme"); if (navigator.clipboard) { navigator.clipboard.writeText(scheme).then(function() { showTooltip(block); }); } else { var textarea = document.createElement("textarea"); textarea.value = scheme; document.body.appendChild(textarea); textarea.select(); document.execCommand("copy"); document.body.removeChild(textarea); showTooltip(block); } }); });})();</script>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cutseq"
3
- version = "0.0.63"
3
+ version = "0.0.64"
4
4
  description = "Automatically cut adapter / barcode / UMI from NGS data"
5
5
  authors = [{ name = "Ye Chang", email = "yech1990@gmail.com" }]
6
6
  requires-python = "~=3.9"
@@ -0,0 +1,213 @@
1
+ #!/usr/bin/env python3
2
+ import sys
3
+ from pathlib import Path
4
+
5
+ # Add project root to sys.path to allow importing cutseq.common
6
+ project_root = Path(__file__).parent.parent
7
+ sys.path.insert(0, str(project_root))
8
+
9
+ try:
10
+ from cutseq.common import BarcodeConfig
11
+ except ImportError as e:
12
+ print(f"Error importing BarcodeConfig from cutseq.common: {e}")
13
+ print(f"Current sys.path: {sys.path}")
14
+ print(f"Project root: {project_root}")
15
+ sys.exit(1)
16
+
17
+ try:
18
+ import tomllib # Python 3.11+
19
+ except ImportError:
20
+ try:
21
+ import tomli as tomllib # Python < 3.11
22
+ except ImportError:
23
+ print(
24
+ "Error: 'tomli' is not installed. Please install it with 'pip install tomli' for Python < 3.11."
25
+ )
26
+ sys.exit(1)
27
+
28
+ COLOR_PALETTE = {
29
+ "p5": "#A8E6CF",
30
+ "p7": "#D1E8D1",
31
+ "umi": "#B2EBF2",
32
+ "inline": "#FFD700",
33
+ "mask": "#DCDCDC",
34
+ "strand_bg": "#FF6F61", # A distinct background for the strand indicator
35
+ "default_seq": "#E0E0E0",
36
+ }
37
+
38
+
39
+ def get_part_type(part_name):
40
+ """Determines the 'type' of adapter part for color selection."""
41
+ if "p5" in part_name:
42
+ return "p5"
43
+ if "p7" in part_name:
44
+ return "p7"
45
+ if "umi" in part_name:
46
+ return "umi"
47
+ if "inline" in part_name:
48
+ return "inline"
49
+ if "mask" in part_name:
50
+ return "mask"
51
+ return "default_seq" # Fallback
52
+
53
+
54
+ def main():
55
+ adapters_toml_path = project_root / "cutseq" / "adapters.toml"
56
+ adapters_md_path = project_root / "docs" / "adapters.md"
57
+
58
+ print(f"Adapters TOML path: {adapters_toml_path}")
59
+ print(f"Adapters MD path: {adapters_md_path}")
60
+
61
+ if not adapters_toml_path.exists():
62
+ print(
63
+ f"Error: {adapters_toml_path} not found. Make sure the script is run from the project root or the path is correct."
64
+ )
65
+ sys.exit(1)
66
+
67
+ try:
68
+ with open(adapters_toml_path, "rb") as f:
69
+ adapters_data = tomllib.load(f)
70
+ except Exception as e:
71
+ print(f"Error parsing {adapters_toml_path}: {e}")
72
+ sys.exit(1)
73
+
74
+ # --- Generate Markdown Content ---
75
+ all_markdown_parts = []
76
+ all_markdown_parts.append("# Adapter Schemes\n")
77
+ all_markdown_parts.append(
78
+ "This file is auto-generated by `scripts/update_adapter_docs.py`. Do not edit manually.\n\n"
79
+ )
80
+ all_markdown_parts.append(
81
+ "This document lists the built-in adapter schemes available in `cutseq`. "
82
+ )
83
+ all_markdown_parts.append(
84
+ "These can be used with the `-A` or `--adapter-name` option in the `cutseq run` command.\n\n"
85
+ )
86
+
87
+ for adapter_key, adapter_info in adapters_data.items():
88
+ if not isinstance(adapter_info, dict) or not all(
89
+ k in adapter_info for k in ["scheme", "description_name", "points"]
90
+ ):
91
+ print(
92
+ f"Warning: Skipping adapter '{adapter_key}' due to missing 'scheme', 'description_name', or 'points' fields."
93
+ )
94
+ continue
95
+
96
+ all_markdown_parts.append(
97
+ f"### {adapter_key} ({adapter_info['description_name']})\n\n"
98
+ )
99
+
100
+ # HTML Visualization
101
+ bc = BarcodeConfig(adapter_info["scheme"])
102
+ scheme_raw = adapter_info["scheme"]
103
+
104
+ html_parts = [
105
+ '<div class="adapter-scheme" style="margin-bottom: 15px; position: relative;">',
106
+ f'<div class="copy-scheme-raw" style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto; cursor: pointer; background: #f8f8f8; transition: box-shadow 0.2s;" title="Click to copy scheme: {scheme_raw}" data-scheme="{scheme_raw}">' # clickable block
107
+ ]
108
+
109
+ adapter_components_ordered = [
110
+ "p5",
111
+ "inline5",
112
+ "umi5",
113
+ "mask5",
114
+ "strand",
115
+ "mask3",
116
+ "umi3",
117
+ "inline3",
118
+ "p7",
119
+ ]
120
+
121
+ for part_name in adapter_components_ordered:
122
+ seq_val = ""
123
+ is_strand_part = False
124
+
125
+ if part_name == "strand":
126
+ strand_char_map = {"+": ">", "-": "<", None: "-"}
127
+ seq_val = strand_char_map.get(getattr(bc, 'strand', None), "-")
128
+ is_strand_part = True
129
+ elif hasattr(bc, part_name):
130
+ barcode_seq_obj = getattr(bc, part_name)
131
+ if hasattr(barcode_seq_obj, "fw"):
132
+ seq_val = barcode_seq_obj.fw
133
+
134
+ if seq_val:
135
+ if is_strand_part:
136
+ html_parts.append(
137
+ f'<div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;"><div style="background-color: {COLOR_PALETTE["strand_bg"]}; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div><span style="position: relative; z-index: 1; color: white; font-weight: bold;">{seq_val}</span></div>'
138
+ )
139
+ else:
140
+ part_type = get_part_type(part_name)
141
+ color = COLOR_PALETTE.get(part_type, COLOR_PALETTE["default_seq"])
142
+ html_parts.append(
143
+ f'<span style="background-color: {color}; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">{seq_val}</span>'
144
+ )
145
+
146
+ html_parts.append("</div>") # Close flex container
147
+ # Add a hidden raw scheme and a tooltip for copy feedback
148
+ html_parts.append(
149
+ '<div class="scheme-raw-tooltip" style="display:none; position:absolute; top:-30px; left:0; background:#222; color:#fff; padding:3px 8px; border-radius:4px; font-size:12px; z-index:10;">Copied!</div>'
150
+ )
151
+ html_parts.append("</div>\n") # Close adapter-scheme div
152
+
153
+ all_markdown_parts.extend(html_parts)
154
+
155
+ # Bullet Points
156
+ if adapter_info["points"]:
157
+ for point in adapter_info["points"]:
158
+ all_markdown_parts.append(f"- {point}\n")
159
+ all_markdown_parts.append("\n---\n") # Add a horizontal rule for separation
160
+
161
+ # --- End Generate Markdown Content ---
162
+ # Remove unused markdown_content assignment
163
+ # Add JS/CSS for copy-to-clipboard functionality at the end of the markdown
164
+ all_markdown_parts.append(
165
+ '<script>'
166
+ '(function() {'
167
+ ' function showTooltip(el) {'
168
+ ' var tooltip = el.parentElement.querySelector(".scheme-raw-tooltip");'
169
+ ' if (tooltip) {'
170
+ ' tooltip.style.display = "block";'
171
+ ' setTimeout(function() { tooltip.style.display = "none"; }, 1200);'
172
+ ' }'
173
+ ' }'
174
+ ' document.querySelectorAll(".copy-scheme-raw").forEach(function(block) {'
175
+ ' block.addEventListener("mouseenter", function() {'
176
+ ' block.style.boxShadow = "0 0 0 2px #FF6F61";'
177
+ ' });'
178
+ ' block.addEventListener("mouseleave", function() {'
179
+ ' block.style.boxShadow = "";'
180
+ ' });'
181
+ ' block.addEventListener("click", function(e) {'
182
+ ' var scheme = block.getAttribute("data-scheme");'
183
+ ' if (navigator.clipboard) {'
184
+ ' navigator.clipboard.writeText(scheme).then(function() {'
185
+ ' showTooltip(block);'
186
+ ' });'
187
+ ' } else {'
188
+ ' var textarea = document.createElement("textarea");'
189
+ ' textarea.value = scheme;'
190
+ ' document.body.appendChild(textarea);'
191
+ ' textarea.select();'
192
+ ' document.execCommand("copy");'
193
+ ' document.body.removeChild(textarea);'
194
+ ' showTooltip(block);'
195
+ ' }'
196
+ ' });'
197
+ ' });'
198
+ '})();'
199
+ '</script>'
200
+ )
201
+
202
+ try:
203
+ adapters_md_path.parent.mkdir(parents=True, exist_ok=True)
204
+ with open(adapters_md_path, "w", encoding="utf-8") as f:
205
+ f.write("".join(all_markdown_parts))
206
+ print(f"Successfully updated {adapters_md_path}")
207
+ except Exception as e:
208
+ print(f"Error writing to {adapters_md_path}: {e}")
209
+ sys.exit(1)
210
+
211
+
212
+ if __name__ == "__main__":
213
+ main()
@@ -1,191 +0,0 @@
1
- # Built-in adapter schemes for cutseq
2
-
3
- # RNA library
4
-
5
- [SMALLRNA]
6
- scheme = "AGTTCTACAGTCCGACGATC>AGATCGGAAGAGCACACGTC"
7
- description_name = "Small RNA Libraries"
8
- points = [
9
- "Used for small RNA sequencing",
10
- "Double ligation method",
11
- "Forward orientation",
12
- "Optional 2nt trimming on both ends for quality"
13
- ]
14
-
15
- [SMRNA]
16
- scheme = "AGTTCTACAGTCCGACGATC>TGGAATTCTCGGGTGCCAAG"
17
- description_name = "Small RNA (Legacy)"
18
- points = [
19
- "Legacy version for small RNA sequencing",
20
- "Scheme: AGTTCTACAGTCCGACGATC>TGGAATTCTCGGGTGCCAAG",
21
- "Forward orientation",
22
- "Refer to library preparation protocol for details."
23
- ]
24
-
25
- [INLINE]
26
- scheme = "AGTTCTACAGTCCGACGATCNNNNN>NNNNN(ATCACG)AGATCGGAAGAGCACACGTC"
27
- description_name = "Custom Barcoded Libraries"
28
- points = [
29
- "Used for libraries with inline barcodes",
30
- "Dual UMI design (5nt each)",
31
- "Forward orientation",
32
- "Contains fixed inline barcode (ATCACG)",
33
- "Scheme: AGTTCTACAGTCCGACGATCNNNNN>NNNNN(ATCACG)AGATCGGAAGAGCACACGTC"
34
- ]
35
-
36
- [TAKARAV2]
37
- scheme = "ACACGACGCTCTTCCGATCTXXX<XXXAGATCGGAAGAGCACACGTC"
38
- description_name = "Takara V2"
39
- points = [
40
- "Scheme: ACACGACGCTCTTCCGATCTXXX<XXXAGATCGGAAGAGCACACGTC",
41
- "Reverse orientation ('<')",
42
- "Contains masked regions (XXX)",
43
- "Refer to Takara V2 library preparation protocol for details."
44
- ]
45
-
46
- [STRANDED]
47
- scheme = "ACACGACGCTCTTCCGATCTX<XXXAGATCGGAAGAGCACACGTC"
48
- description_name = "Stranded RNA"
49
- points = [
50
- "Scheme: ACACGACGCTCTTCCGATCTX<XXXAGATCGGAAGAGCACACGTC",
51
- "Reverse orientation ('<')",
52
- "Contains masked regions (X, XXX)",
53
- "Refer to stranded RNA library preparation protocol for details."
54
- ]
55
-
56
- [UNSTRANDED]
57
- scheme = "ACACGACGCTCTTCCGATCTXX-XXAGATCGGAAGAGCACACGTC"
58
- description_name = "Unstranded RNA/DNA"
59
- points = [
60
- "Scheme: ACACGACGCTCTTCCGATCTXX-XXAGATCGGAAGAGCACACGTC",
61
- "Unstranded ('-')",
62
- "Contains masked regions (XX)",
63
- "Refer to library preparation protocol for details."
64
- ]
65
-
66
- [TAKARAV3]
67
- scheme = "ACACGACGCTCTTCCGATCTXXX<XXXXXXNNNNNNNNAGATCGGAAGAGCACACGTC"
68
- description_name = "Takara V3"
69
- points = [
70
- "Scheme: ACACGACGCTCTTCCGATCTXXX<XXXXXXNNNNNNNNAGATCGGAAGAGCACACGTC",
71
- "Reverse orientation ('<')",
72
- "Contains masked regions (XXX, XXXXXX)",
73
- "Contains UMI sequences (NNNNNNNN)",
74
- "Refer to Takara V3 library preparation protocol for details."
75
- ]
76
-
77
- [ECLIP6]
78
- scheme = "ACACGACGCTCTTCCGATCTXX<XNNNNNNAGATCGGAAGAGCACACGTC"
79
- description_name = "eCLIP (6nt UMI)"
80
- points = [
81
- "Scheme: ACACGACGCTCTTCCGATCTXX<XNNNNNNAGATCGGAAGAGCACACGTC",
82
- "Reverse orientation ('<')",
83
- "Contains masked regions (XX, X)",
84
- "Contains UMI sequences (NNNNNN)",
85
- "Used for eCLIP experiments with a 6-nucleotide UMI."
86
- ]
87
-
88
- [ECLIP10]
89
- scheme = "ACACGACGCTCTTCCGATCTXX<XNNNNNNNNNNAGATCGGAAGAGCACACGTC"
90
- description_name = "eCLIP (10nt UMI)"
91
- points = [
92
- "Scheme: ACACGACGCTCTTCCGATCTXX<XNNNNNNNNNNAGATCGGAAGAGCACACGTC",
93
- "Reverse orientation ('<')",
94
- "Contains masked regions (XX, X)",
95
- "Contains UMI sequences (NNNNNNNNNN)",
96
- "Used for eCLIP experiments with a 10-nucleotide UMI."
97
- ]
98
-
99
- [SACSEQ]
100
- scheme = "ACACGACGCTCTTCCGATCT<XXXXNNNNNNAGATCGGAAGAGCACACGTC"
101
- description_name = "SAC-Seq"
102
- points = [
103
- "Scheme: ACACGACGCTCTTCCGATCT<XXXXNNNNNNAGATCGGAAGAGCACACGTC",
104
- "Reverse orientation ('<')",
105
- "Contains masked regions (XXXX)",
106
- "Contains UMI sequences (NNNNNN)",
107
- "Used for SAC-Seq (Single-cell RNA-Seq) or similar protocols."
108
- ]
109
-
110
- [SACSEQV3]
111
- scheme = "ACACGACGCTCTTCCGATCTNNNNNNNNX>XXNNNNNNNNAGATCGGAAGAGCACACGTC"
112
- description_name = "SAC-Seq V3"
113
- points = [
114
- "Scheme: ACACGACGCTCTTCCGATCTNNNNNNNNX>XXNNNNNNNNAGATCGGAAGAGCACACGTC",
115
- "Forward orientation ('>')",
116
- "Contains masked regions (X, XX)",
117
- "Contains dual UMI sequences (NNNNNNNN on both sides)",
118
- "Refer to SAC-Seq V3 library preparation protocol for details."
119
- ]
120
-
121
- [XGENRNA]
122
- scheme = "ACACGACGCTCTTCCGATCTXXXXXX<XXXXXXXXXXXXXXXAGATCGGAAGAGCACACGTC"
123
- description_name = "xGen RNA"
124
- points = [
125
- "Scheme: ACACGACGCTCTTCCGATCTXXXXXX<XXXXXXXXXXXXXXXAGATCGGAAGAGCACACGTC",
126
- "Reverse orientation ('<')",
127
- "Contains extensive masked regions (XXXXXX, XXXXXXXXXXXXXXX)",
128
- "Likely for specific xGen RNA library preps, check protocol."
129
- ]
130
-
131
- [ILLUMINARNA]
132
- scheme = "AGATGTGTATAAGAGACAG<CTGTCTCTTATACACATCT"
133
- description_name = "Illumina Stranded RNA (Nextera-based)"
134
- points = [
135
- "Scheme: AGATGTGTATAAGAGACAG<CTGTCTCTTATACACATCT",
136
- "Reverse orientation ('<')",
137
- "Uses Nextera-style adapter sequences."
138
- ]
139
-
140
- # DNA library
141
-
142
- [DSLIGATION]
143
- scheme = "ACACGACGCTCTTCCGATCT>AGATCGGAAGAGCACACGTC"
144
- description_name = "dsDNA Ligation"
145
- points = [
146
- "Basic dsDNA ligation with A-tailing",
147
- "Forward orientation",
148
- "No UMIs or special trimming needed"
149
- ]
150
-
151
- # xGenDNA = "ACACGACGCTCTTCCGATCTXXX>(CCCCCCCCCCCCCCCCCCCC;noninternal;e=0.5;o=1)AGATCGGAAGAGCACACGTC" # Commented out
152
-
153
- [XGENMETHY]
154
- scheme = "ACACGACGCTCTTCCGATCTXX>XXXXXXXXXXAGATCGGAAGAGCACACGTC"
155
- description_name = "xGen Methyl-Seq"
156
- points = [
157
- "Scheme: ACACGACGCTCTTCCGATCTXX>XXXXXXXXXXAGATCGGAAGAGCACACGTC",
158
- "Forward orientation ('>')",
159
- "Contains masked regions (XX, XXXXXXXXXX)",
160
- "Designed for xGen Methyl-Seq library kits."
161
- ]
162
-
163
- [XGENSNMC]
164
- scheme = "ACACGACGCTCTTCCGATCTXXXXXX>XXXXXXXXXXXXXXXAGATCGGAAGAGCACACGTC"
165
- description_name = "xGen snmC-Seq"
166
- points = [
167
- "Scheme: ACACGACGCTCTTCCGATCTXXXXXX>XXXXXXXXXXXXXXXAGATCGGAAGAGCACACGTC",
168
- "Forward orientation ('>')",
169
- "Contains extensive masked regions (XXXXXX, XXXXXXXXXXXXXXX)",
170
- "Designed for xGen single-nucleus methylC-Seq (snmC-Seq) library kits."
171
- ]
172
-
173
- [PBAT]
174
- scheme = "ACACGACGCTCTTCCGATCTXXXXXX<XXXXXXAGATCGGAAGAGCACACGTC"
175
- description_name = "PBAT (Post-Bisulfite Adapter Tagging)"
176
- points = [
177
- "Scheme: ACACGACGCTCTTCCGATCTXXXXXX<XXXXXXAGATCGGAAGAGCACACGTC",
178
- "Reverse orientation ('<')",
179
- "Contains masked regions (XXXXXX on both sides)",
180
- "Used for PBAT-style bisulfite sequencing libraries."
181
- ]
182
-
183
- [NEXTERA]
184
- scheme = "AGATGTGTATAAGAGACAG>CTGTCTCTTATACACATCT"
185
- description_name = "Nextera (General)"
186
- points = [
187
- "Scheme: AGATGTGTATAAGAGACAG>CTGTCTCTTATACACATCT",
188
- "Forward orientation ('>')",
189
- "Standard Nextera transposase-based library preparation.",
190
- "No UMIs by default in this basic scheme."
191
- ]
@@ -1,243 +0,0 @@
1
- # Adapter Schemes
2
- This file is auto-generated by `scripts/update_adapter_docs.py`. Do not edit manually.
3
-
4
- This document lists the built-in adapter schemes available in `cutseq`. These can be used with the `-A` or `--adapter-name` option in the `cutseq run` command.
5
-
6
- ### SMALLRNA (Small RNA Libraries)
7
-
8
- <div class="adapter-scheme" style="margin-bottom: 15px;"><div style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto;"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGTTCTACAGTCCGACGATC</span>
9
- <div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;">
10
- <div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div>
11
- <span style="position: relative; z-index: 1; color: white; font-weight: bold;">></span>
12
- </div><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div></div>
13
- - Used for small RNA sequencing
14
- - Double ligation method
15
- - Forward orientation
16
- - Optional 2nt trimming on both ends for quality
17
-
18
- ---
19
- ### SMRNA (Small RNA (Legacy))
20
-
21
- <div class="adapter-scheme" style="margin-bottom: 15px;"><div style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto;"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGTTCTACAGTCCGACGATC</span>
22
- <div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;">
23
- <div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div>
24
- <span style="position: relative; z-index: 1; color: white; font-weight: bold;">></span>
25
- </div><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">TGGAATTCTCGGGTGCCAAG</span></div></div>
26
- - Legacy version for small RNA sequencing
27
- - Scheme: AGTTCTACAGTCCGACGATC>TGGAATTCTCGGGTGCCAAG
28
- - Forward orientation
29
- - Refer to library preparation protocol for details.
30
-
31
- ---
32
- ### INLINE (Custom Barcoded Libraries)
33
-
34
- <div class="adapter-scheme" style="margin-bottom: 15px;"><div style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto;"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGTTCTACAGTCCGACGATC</span><span style="background-color: #B2EBF2; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">NNNNN</span>
35
- <div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;">
36
- <div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div>
37
- <span style="position: relative; z-index: 1; color: white; font-weight: bold;">></span>
38
- </div><span style="background-color: #B2EBF2; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">NNNNN</span><span style="background-color: #FFD700; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ATCACG</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div></div>
39
- - Used for libraries with inline barcodes
40
- - Dual UMI design (5nt each)
41
- - Forward orientation
42
- - Contains fixed inline barcode (ATCACG)
43
- - Scheme: AGTTCTACAGTCCGACGATCNNNNN>NNNNN(ATCACG)AGATCGGAAGAGCACACGTC
44
-
45
- ---
46
- ### TAKARAV2 (Takara V2)
47
-
48
- <div class="adapter-scheme" style="margin-bottom: 15px;"><div style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto;"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXX</span>
49
- <div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;">
50
- <div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div>
51
- <span style="position: relative; z-index: 1; color: white; font-weight: bold;"><</span>
52
- </div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXX</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div></div>
53
- - Scheme: ACACGACGCTCTTCCGATCTXXX<XXXAGATCGGAAGAGCACACGTC
54
- - Reverse orientation ('<')
55
- - Contains masked regions (XXX)
56
- - Refer to Takara V2 library preparation protocol for details.
57
-
58
- ---
59
- ### STRANDED (Stranded RNA)
60
-
61
- <div class="adapter-scheme" style="margin-bottom: 15px;"><div style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto;"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">X</span>
62
- <div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;">
63
- <div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div>
64
- <span style="position: relative; z-index: 1; color: white; font-weight: bold;"><</span>
65
- </div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXX</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div></div>
66
- - Scheme: ACACGACGCTCTTCCGATCTX<XXXAGATCGGAAGAGCACACGTC
67
- - Reverse orientation ('<')
68
- - Contains masked regions (X, XXX)
69
- - Refer to stranded RNA library preparation protocol for details.
70
-
71
- ---
72
- ### UNSTRANDED (Unstranded RNA/DNA)
73
-
74
- <div class="adapter-scheme" style="margin-bottom: 15px;"><div style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto;"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XX</span>
75
- <div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;">
76
- <div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div>
77
- <span style="position: relative; z-index: 1; color: white; font-weight: bold;">-</span>
78
- </div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XX</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div></div>
79
- - Scheme: ACACGACGCTCTTCCGATCTXX-XXAGATCGGAAGAGCACACGTC
80
- - Unstranded ('-')
81
- - Contains masked regions (XX)
82
- - Refer to library preparation protocol for details.
83
-
84
- ---
85
- ### TAKARAV3 (Takara V3)
86
-
87
- <div class="adapter-scheme" style="margin-bottom: 15px;"><div style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto;"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXX</span>
88
- <div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;">
89
- <div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div>
90
- <span style="position: relative; z-index: 1; color: white; font-weight: bold;"><</span>
91
- </div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXXXXX</span><span style="background-color: #B2EBF2; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">NNNNNNNN</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div></div>
92
- - Scheme: ACACGACGCTCTTCCGATCTXXX<XXXXXXNNNNNNNNAGATCGGAAGAGCACACGTC
93
- - Reverse orientation ('<')
94
- - Contains masked regions (XXX, XXXXXX)
95
- - Contains UMI sequences (NNNNNNNN)
96
- - Refer to Takara V3 library preparation protocol for details.
97
-
98
- ---
99
- ### ECLIP6 (eCLIP (6nt UMI))
100
-
101
- <div class="adapter-scheme" style="margin-bottom: 15px;"><div style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto;"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XX</span>
102
- <div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;">
103
- <div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div>
104
- <span style="position: relative; z-index: 1; color: white; font-weight: bold;"><</span>
105
- </div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">X</span><span style="background-color: #B2EBF2; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">NNNNNN</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div></div>
106
- - Scheme: ACACGACGCTCTTCCGATCTXX<XNNNNNNAGATCGGAAGAGCACACGTC
107
- - Reverse orientation ('<')
108
- - Contains masked regions (XX, X)
109
- - Contains UMI sequences (NNNNNN)
110
- - Used for eCLIP experiments with a 6-nucleotide UMI.
111
-
112
- ---
113
- ### ECLIP10 (eCLIP (10nt UMI))
114
-
115
- <div class="adapter-scheme" style="margin-bottom: 15px;"><div style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto;"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XX</span>
116
- <div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;">
117
- <div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div>
118
- <span style="position: relative; z-index: 1; color: white; font-weight: bold;"><</span>
119
- </div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">X</span><span style="background-color: #B2EBF2; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">NNNNNNNNNN</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div></div>
120
- - Scheme: ACACGACGCTCTTCCGATCTXX<XNNNNNNNNNNAGATCGGAAGAGCACACGTC
121
- - Reverse orientation ('<')
122
- - Contains masked regions (XX, X)
123
- - Contains UMI sequences (NNNNNNNNNN)
124
- - Used for eCLIP experiments with a 10-nucleotide UMI.
125
-
126
- ---
127
- ### SACSEQ (SAC-Seq)
128
-
129
- <div class="adapter-scheme" style="margin-bottom: 15px;"><div style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto;"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span>
130
- <div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;">
131
- <div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div>
132
- <span style="position: relative; z-index: 1; color: white; font-weight: bold;"><</span>
133
- </div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXXX</span><span style="background-color: #B2EBF2; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">NNNNNN</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div></div>
134
- - Scheme: ACACGACGCTCTTCCGATCT<XXXXNNNNNNAGATCGGAAGAGCACACGTC
135
- - Reverse orientation ('<')
136
- - Contains masked regions (XXXX)
137
- - Contains UMI sequences (NNNNNN)
138
- - Used for SAC-Seq (Single-cell RNA-Seq) or similar protocols.
139
-
140
- ---
141
- ### SACSEQV3 (SAC-Seq V3)
142
-
143
- <div class="adapter-scheme" style="margin-bottom: 15px;"><div style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto;"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #B2EBF2; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">NNNNNNNN</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">X</span>
144
- <div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;">
145
- <div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div>
146
- <span style="position: relative; z-index: 1; color: white; font-weight: bold;">></span>
147
- </div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XX</span><span style="background-color: #B2EBF2; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">NNNNNNNN</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div></div>
148
- - Scheme: ACACGACGCTCTTCCGATCTNNNNNNNNX>XXNNNNNNNNAGATCGGAAGAGCACACGTC
149
- - Forward orientation ('>')
150
- - Contains masked regions (X, XX)
151
- - Contains dual UMI sequences (NNNNNNNN on both sides)
152
- - Refer to SAC-Seq V3 library preparation protocol for details.
153
-
154
- ---
155
- ### XGENRNA (xGen RNA)
156
-
157
- <div class="adapter-scheme" style="margin-bottom: 15px;"><div style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto;"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXXXXX</span>
158
- <div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;">
159
- <div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div>
160
- <span style="position: relative; z-index: 1; color: white; font-weight: bold;"><</span>
161
- </div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXXXXXXXXXXXXXX</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div></div>
162
- - Scheme: ACACGACGCTCTTCCGATCTXXXXXX<XXXXXXXXXXXXXXXAGATCGGAAGAGCACACGTC
163
- - Reverse orientation ('<')
164
- - Contains extensive masked regions (XXXXXX, XXXXXXXXXXXXXXX)
165
- - Likely for specific xGen RNA library preps, check protocol.
166
-
167
- ---
168
- ### ILLUMINARNA (Illumina Stranded RNA (Nextera-based))
169
-
170
- <div class="adapter-scheme" style="margin-bottom: 15px;"><div style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto;"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATGTGTATAAGAGACAG</span>
171
- <div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;">
172
- <div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div>
173
- <span style="position: relative; z-index: 1; color: white; font-weight: bold;"><</span>
174
- </div><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">CTGTCTCTTATACACATCT</span></div></div>
175
- - Scheme: AGATGTGTATAAGAGACAG<CTGTCTCTTATACACATCT
176
- - Reverse orientation ('<')
177
- - Uses Nextera-style adapter sequences.
178
-
179
- ---
180
- ### DSLIGATION (dsDNA Ligation)
181
-
182
- <div class="adapter-scheme" style="margin-bottom: 15px;"><div style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto;"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span>
183
- <div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;">
184
- <div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div>
185
- <span style="position: relative; z-index: 1; color: white; font-weight: bold;">></span>
186
- </div><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div></div>
187
- - Basic dsDNA ligation with A-tailing
188
- - Forward orientation
189
- - No UMIs or special trimming needed
190
-
191
- ---
192
- ### XGENMETHY (xGen Methyl-Seq)
193
-
194
- <div class="adapter-scheme" style="margin-bottom: 15px;"><div style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto;"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XX</span>
195
- <div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;">
196
- <div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div>
197
- <span style="position: relative; z-index: 1; color: white; font-weight: bold;">></span>
198
- </div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXXXXXXXXX</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div></div>
199
- - Scheme: ACACGACGCTCTTCCGATCTXX>XXXXXXXXXXAGATCGGAAGAGCACACGTC
200
- - Forward orientation ('>')
201
- - Contains masked regions (XX, XXXXXXXXXX)
202
- - Designed for xGen Methyl-Seq library kits.
203
-
204
- ---
205
- ### XGENSNMC (xGen snmC-Seq)
206
-
207
- <div class="adapter-scheme" style="margin-bottom: 15px;"><div style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto;"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXXXXX</span>
208
- <div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;">
209
- <div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div>
210
- <span style="position: relative; z-index: 1; color: white; font-weight: bold;">></span>
211
- </div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXXXXXXXXXXXXXX</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div></div>
212
- - Scheme: ACACGACGCTCTTCCGATCTXXXXXX>XXXXXXXXXXXXXXXAGATCGGAAGAGCACACGTC
213
- - Forward orientation ('>')
214
- - Contains extensive masked regions (XXXXXX, XXXXXXXXXXXXXXX)
215
- - Designed for xGen single-nucleus methylC-Seq (snmC-Seq) library kits.
216
-
217
- ---
218
- ### PBAT (PBAT (Post-Bisulfite Adapter Tagging))
219
-
220
- <div class="adapter-scheme" style="margin-bottom: 15px;"><div style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto;"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">ACACGACGCTCTTCCGATCT</span><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXXXXX</span>
221
- <div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;">
222
- <div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div>
223
- <span style="position: relative; z-index: 1; color: white; font-weight: bold;"><</span>
224
- </div><span style="background-color: #DCDCDC; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">XXXXXX</span><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATCGGAAGAGCACACGTC</span></div></div>
225
- - Scheme: ACACGACGCTCTTCCGATCTXXXXXX<XXXXXXAGATCGGAAGAGCACACGTC
226
- - Reverse orientation ('<')
227
- - Contains masked regions (XXXXXX on both sides)
228
- - Used for PBAT-style bisulfite sequencing libraries.
229
-
230
- ---
231
- ### NEXTERA (Nextera (General))
232
-
233
- <div class="adapter-scheme" style="margin-bottom: 15px;"><div style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto;"><span style="background-color: #A8E6CF; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">AGATGTGTATAAGAGACAG</span>
234
- <div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;">
235
- <div style="background-color: #FF6F61; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div>
236
- <span style="position: relative; z-index: 1; color: white; font-weight: bold;">></span>
237
- </div><span style="background-color: #D1E8D1; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">CTGTCTCTTATACACATCT</span></div></div>
238
- - Scheme: AGATGTGTATAAGAGACAG>CTGTCTCTTATACACATCT
239
- - Forward orientation ('>')
240
- - Standard Nextera transposase-based library preparation.
241
- - No UMIs by default in this basic scheme.
242
-
243
- ---
@@ -1,135 +0,0 @@
1
- #!/usr/bin/env python3
2
- import sys
3
- from pathlib import Path
4
-
5
- # Add project root to sys.path to allow importing cutseq.common
6
- project_root = Path(__file__).parent.parent
7
- sys.path.insert(0, str(project_root))
8
-
9
- try:
10
- from cutseq.common import BarcodeConfig
11
- except ImportError as e:
12
- print(f"Error importing BarcodeConfig from cutseq.common: {e}")
13
- print(f"Current sys.path: {sys.path}")
14
- print(f"Project root: {project_root}")
15
- sys.exit(1)
16
-
17
- try:
18
- import tomllib # Python 3.11+
19
- except ImportError:
20
- try:
21
- import tomli as tomllib # Python < 3.11
22
- except ImportError:
23
- print("Error: 'tomli' is not installed. Please install it with 'pip install tomli' for Python < 3.11.")
24
- sys.exit(1)
25
-
26
- COLOR_PALETTE = {
27
- "p5": "#A8E6CF",
28
- "p7": "#D1E8D1",
29
- "umi": "#B2EBF2",
30
- "inline": "#FFD700",
31
- "mask": "#DCDCDC",
32
- "strand_bg": "#FF6F61", # A distinct background for the strand indicator
33
- "default_seq": "#E0E0E0",
34
- }
35
-
36
- def get_part_type(part_name):
37
- """Determines the 'type' of adapter part for color selection."""
38
- if "p5" in part_name: return "p5"
39
- if "p7" in part_name: return "p7"
40
- if "umi" in part_name: return "umi"
41
- if "inline" in part_name: return "inline"
42
- if "mask" in part_name: return "mask"
43
- return "default_seq" # Fallback
44
-
45
- def main():
46
- adapters_toml_path = project_root / "cutseq" / "adapters.toml"
47
- adapters_md_path = project_root / "docs" / "adapters.md"
48
-
49
- print(f"Adapters TOML path: {adapters_toml_path}")
50
- print(f"Adapters MD path: {adapters_md_path}")
51
-
52
- if not adapters_toml_path.exists():
53
- print(f"Error: {adapters_toml_path} not found. Make sure the script is run from the project root or the path is correct.")
54
- sys.exit(1)
55
-
56
- try:
57
- with open(adapters_toml_path, "rb") as f:
58
- adapters_data = tomllib.load(f)
59
- except Exception as e:
60
- print(f"Error parsing {adapters_toml_path}: {e}")
61
- sys.exit(1)
62
-
63
- # --- Generate Markdown Content ---
64
- all_markdown_parts = []
65
- all_markdown_parts.append("# Adapter Schemes\n")
66
- all_markdown_parts.append("This file is auto-generated by `scripts/update_adapter_docs.py`. Do not edit manually.\n\n")
67
- all_markdown_parts.append("This document lists the built-in adapter schemes available in `cutseq`. ")
68
- all_markdown_parts.append("These can be used with the `-A` or `--adapter-name` option in the `cutseq run` command.\n\n")
69
-
70
-
71
- for adapter_key, adapter_info in adapters_data.items():
72
- if not isinstance(adapter_info, dict) or not all(k in adapter_info for k in ['scheme', 'description_name', 'points']):
73
- print(f"Warning: Skipping adapter '{adapter_key}' due to missing 'scheme', 'description_name', or 'points' fields.")
74
- continue
75
-
76
- all_markdown_parts.append(f"### {adapter_key} ({adapter_info['description_name']})\n\n")
77
-
78
- # HTML Visualization
79
- bc = BarcodeConfig(adapter_info['scheme'])
80
-
81
- html_parts = ['<div class="adapter-scheme" style="margin-bottom: 15px;">']
82
- html_parts.append('<div style="display: flex; flex-wrap: nowrap; align-items: center; font-family: monospace; font-size: 14px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; overflow-x: auto;">')
83
-
84
- adapter_components_ordered = ["p5", "inline5", "umi5", "mask5", "strand", "mask3", "umi3", "inline3", "p7"]
85
-
86
- for part_name in adapter_components_ordered:
87
- seq_val = ""
88
- is_strand_part = False
89
-
90
- if part_name == "strand":
91
- strand_char_map = {"+": ">", "-": "<", None: "-"}
92
- seq_val = strand_char_map.get(bc.strand, "-")
93
- is_strand_part = True
94
- elif hasattr(bc, part_name):
95
- barcode_seq_obj = getattr(bc, part_name)
96
- if hasattr(barcode_seq_obj, 'fw'):
97
- seq_val = barcode_seq_obj.fw
98
- # else: might be an older structure or direct string, handle if necessary
99
-
100
- if seq_val: # Only render if there's a sequence or it's the strand part
101
- if is_strand_part:
102
- # Strand indicator with polygon background
103
- html_parts.append(f'''
104
- <div style="position: relative; width: 30px; height: 30px; margin: 0 2px; text-align: center; line-height: 30px;">
105
- <div style="background-color: {COLOR_PALETTE['strand_bg']}; width: 100%; height: 100%; position: absolute; top: 0; left: 0; clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></div>
106
- <span style="position: relative; z-index: 1; color: white; font-weight: bold;">{seq_val}</span>
107
- </div>''')
108
- else:
109
- part_type = get_part_type(part_name)
110
- color = COLOR_PALETTE.get(part_type, COLOR_PALETTE["default_seq"])
111
- html_parts.append(f'<span style="background-color: {color}; padding: 5px 8px; margin: 0 2px; border-radius: 3px; white-space: nowrap;">{seq_val}</span>')
112
-
113
- html_parts.append('</div></div>\n') # Close flex container and adapter-scheme div
114
- all_markdown_parts.extend(html_parts)
115
-
116
- # Bullet Points
117
- if adapter_info['points']:
118
- for point in adapter_info['points']:
119
- all_markdown_parts.append(f"- {point}\n")
120
- all_markdown_parts.append("\n---\n") # Add a horizontal rule for separation
121
-
122
- markdown_content = "".join(all_markdown_parts)
123
- # --- End Generate Markdown Content ---
124
-
125
- try:
126
- adapters_md_path.parent.mkdir(parents=True, exist_ok=True)
127
- with open(adapters_md_path, "w", encoding="utf-8") as f:
128
- f.write(markdown_content)
129
- print(f"Successfully updated {adapters_md_path}")
130
- except Exception as e:
131
- print(f"Error writing to {adapters_md_path}: {e}")
132
- sys.exit(1)
133
-
134
- if __name__ == "__main__":
135
- main()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes