-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathspatula.cpp
More file actions
153 lines (141 loc) · 9.51 KB
/
Copy pathspatula.cpp
File metadata and controls
153 lines (141 loc) · 9.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include "spatula.h"
#include "qgenlib/commands.h"
#include "qgenlib/qgen_utils.h"
int32_t cmdMatchTag(int32_t argc, char **argv);
int32_t cmdSearchTag(int32_t argc, char **argv);
int32_t cmdMakeSpatialDGE(int32_t argc, char **argv);
int32_t cmdMatchSpatialBarcodes(int32_t argc, char **argv);
int32_t cmdMergeMatchedTags(int32_t argc, char **argv);
int32_t cmdBuildSpatialBarcodeDict(int32_t argc, char **argv);
int32_t cmdReformatFASTQs(int32_t argc, char **argv);
int32_t cmdFilterFASTQs(int32_t argc, char **argv);
int32_t cmdReformatFASTQsMT(int32_t argc, char **argv);
int32_t cmdDGE2SDGE(int32_t argc, char **argv);
int32_t cmdSGE2TSV(int32_t argc, char **argv);
int32_t cmdMEX2SpTSV(int32_t argc, char **argv);
int32_t cmdPixel2SpTSV(int32_t argc, char **argv);
int32_t cmdMEXSubset(int32_t argc, char **argv);
int32_t cmdSpTSV2MEX(int32_t argc, char **argv);
int32_t cmdSpTSV2Model(int32_t argc, char **argv);
int32_t cmdConvertSGE(int32_t argc, char **argv);
int32_t cmdFilterTSV(int32_t argc, char **argv);
int32_t cmdSegmentSGE(int32_t argc, char **argv);
int32_t cmdDrawSGE(int32_t argc, char **argv);
int32_t cmdDrawTSV(int32_t argc, char **argv);
int32_t cmdSubsetSGE(int32_t argc, char **argv);
int32_t cmdCombineSGE(int32_t argc, char **argv);
int32_t cmdEvalDupsSBCD(int32_t argc, char **argv);
int32_t cmdDrawXY(int32_t argc, char **argv);
int32_t cmdDraw3way(int32_t argc, char **argv);
int32_t cmdPngMono2RGBA(int32_t argc, char **argv);
int32_t cmdCombineSBCD(int32_t argc, char **argv);
int32_t cmdHist(int32_t argc, char **argv);
int32_t cmdFilterCommonBarcodes(int32_t argc, char **argv);
int32_t cmdStratifyFASTQByBarcodes(int32_t argc, char **argv);
int32_t cmdCustomDemuxFASTQ(int32_t argc, char **argv);
int32_t cmdJoinPixelTSV(int32_t argc, char **argv);
int32_t cmdPairPseudobulkFromDecode(int32_t argc, char **argv);
int32_t cmdPseudobulkFromDecode(int32_t argc, char **argv);
int32_t cmdDiffExpDecode(int32_t argc, char **argv);
int32_t cmdDiffExpModelMatrix(int32_t argc, char **argv);
int32_t cmdMergePseudobulk(int32_t argc, char **argv);
int32_t cmdReformatTsv(int32_t argc, char **argv);
int32_t cmdPastePixelTSV(int32_t argc, char **argv);
int32_t cmdAppendTopKTSV(int32_t argc, char **argv);
int32_t cmdJoinPixelDecode(int32_t argc, char **argv);
int32_t cmdMergeSpTSV(int32_t argc, char **argv);
int32_t cmdDrawPolygons(int32_t argc, char **argv);
int32_t cmdPixels2Cells(int32_t argc, char **argv);
int32_t cmdSplitMoleculeCounts(int32_t argc, char **argv);
int32_t cmdAssignFeature2Bin(int32_t argc, char **argv);
int32_t cmdSplitMol2Bin(int32_t argc, char **argv);
int32_t cmdTsvAddCellId(int32_t argc, char **argv);
int32_t main(int32_t argc, char **argv)
{
commandHelp.copyright_str = "Copyright (c) 2022-2024 by Hyun Min Kang";
commandList cl;
BEGIN_LONG_COMMANDS(longCommandlines)
//LONG_COMMAND_GROUP("Tools for Analyzing Spatial Barcodes", NULL)
//LONG_COMMAND_GROUP("Spatial Barcodes ", NULL)
//LONG_COMMAND_GROUP("Tools for Analyzing Seq-Scope-specific Spatial Gene Expression (SGE)", NULL)
LONG_COMMAND_GROUP("Seq-Scope Tools", NULL)
LONG_COMMAND("build-sbcds", &cmdBuildSpatialBarcodeDict, "Create spatial barcode dictionary based from HDMI FASTQ arrays")
LONG_COMMAND("convert-sge", &cmdConvertSGE, "Convert SGE into plain various formats")
LONG_COMMAND("combine-sbcds", &cmdCombineSBCD, "Combine multiple SBCD files")
LONG_COMMAND("combine-sge", &cmdCombineSGE, "Combine multiple SGE files")
LONG_COMMAND("dge2sdge", &cmdDGE2SDGE, "Convert DGE (from STARsolo) into SGE format (same as dge2sge)")
LONG_COMMAND("dge2sge", &cmdDGE2SDGE, "Convert DGE (from STARsolo) into SGE format (same as dge2sdge)")
LONG_COMMAND("eval-dups-sbcds", &cmdEvalDupsSBCD, "Evaluate duplicates in spatial barcodes")
LONG_COMMAND("filter-tsv", &cmdFilterTSV, "Filter TSV based on spatial coordinates or gene list")
LONG_COMMAND("make-sdge", &cmdMakeSpatialDGE, "Make spatial DGE files from STARsolo output")
LONG_COMMAND("match-sbcds", &cmdMatchSpatialBarcodes, "Match the FASTQ file containing spatial barcodes with the spatial barcode dictionary")
LONG_COMMAND("match-tag", &cmdMatchTag, "Match tags from FASTQ")
LONG_COMMAND("merge-matched-tags", &cmdMergeMatchedTags, "Merged matched tags generated by match-tag command")
LONG_COMMAND("search-tag", &cmdSearchTag, "Search tags from FASTQ")
LONG_COMMAND("sge2tsv", &cmdSGE2TSV, "Convert SGE (from sge2sdge) into plain TSV format (unsorted)")
LONG_COMMAND("segment-sge", &cmdSegmentSGE, "Segment SGE based on custom, grid, or hexagonal masks")
LONG_COMMAND("subset-sge", &cmdSubsetSGE, "Subset Spatial SGE based on bounding box")
//LONG_COMMAND_GROUP("Tools for Analyzing FICTURE-specific Gene Expression data", NULL)
LONG_COMMAND_GROUP("FICTURE Tools", NULL)
LONG_COMMAND("append-topk-tsv", &cmdAppendTopKTSV, "Append topK and topP columns to the input TSV file")
LONG_COMMAND("diffexp-model-matrix", &cmdDiffExpModelMatrix, "Perform differential expression test from model matrix")
LONG_COMMAND("diffexp-decode", &cmdDiffExpDecode, "Perform differential expression test and create pseudobulk data from pixel-level decoding output")
LONG_COMMAND("join-pixel-decode", &cmdJoinPixelDecode, "Join pixel-level-decode output from FICTURE2 with raw transcript-level TSV files")
LONG_COMMAND("join-pixel-tsv", &cmdJoinPixelTSV, "Join pixel-level output from FICTURE with raw transcript-level TSV files")
LONG_COMMAND("merge-pseudobulk", &cmdMergePseudobulk, "Merge multiple pseudobulk matrices into one")
LONG_COMMAND("merge-sptsv", &cmdMergeSpTSV, "Merge multiple sparse TSV files into a single sparse TSV file")
LONG_COMMAND("mex2sptsv", &cmdMEX2SpTSV, "Convert 10x Market Exchange (MEX) formatted DGE to Sparse TSV format in FICTURE2")
LONG_COMMAND("paste-pixel-tsv", &cmdPastePixelTSV, "Paste pixel-level output from FICTURE2 with raw transcript-level TSV files")
LONG_COMMAND("pseudobulk-from-decode", &cmdPseudobulkFromDecode, "Write pseudobulk matrix from pixel-level decode output")
LONG_COMMAND("pair-pseudobulk-from-decode", &cmdPairPseudobulkFromDecode, "Write pairwise pseudobulk matrix from pixel-level decode output")
LONG_COMMAND("pixel2sptsv", &cmdPixel2SpTSV, "Convert pixel-level TSV to Sparse TSV based on assigned cell IDs")
LONG_COMMAND("subset-mex", &cmdMEXSubset, "Subset 10x Market Exchange (MEX) formatted DGE to specific features and barcodes")
LONG_COMMAND("sptsv2mex", &cmdSpTSV2MEX, "Convert Sparse TSV format in FICTURE2 to 10x Market Exchange (MEX) formatted DGE")
LONG_COMMAND("sptsv2model", &cmdSpTSV2Model, "Create model matrix from Sparse TSV format in FICTURE2 with cluster assignment")
LONG_COMMAND("pixels2cells", &cmdPixels2Cells, "Assign pixels to cell IDs based on boundary polygons")
LONG_COMMAND("tsv-add-cell-id", &cmdTsvAddCellId, "Annotate transcript TSV with cell IDs from boundary polygons (exact, multithreaded)")
LONG_COMMAND("assign-feature2bin", &cmdAssignFeature2Bin, "Assign features (genes) into ordered bins based on total counts, writing the bin assignment as JSON")
LONG_COMMAND("split-mol2bin", &cmdSplitMol2Bin, "Split a molecule TSV into per-bin files using a gene->bin assignment JSON (from assign-feature2bin)")
LONG_COMMAND("split-molecule-counts", &cmdSplitMoleculeCounts, "(Deprecated: use assign-feature2bin + split-mol2bin) Split molecule counts into pixel-level bins based on gene names")
LONG_COMMAND_GROUP("FASTQ Tools", NULL)
LONG_COMMAND("custom-demux-fastq", &cmdCustomDemuxFASTQ, "Demultiplex FASTQ files based in a customized manner")
LONG_COMMAND("filter-common-barcodes", &cmdFilterCommonBarcodes, "Filter FASTQ files based on the frequency of barcodes")
LONG_COMMAND("filter-fastqs", &cmdFilterFASTQs, "Filter FASTQs based on a pattern")
LONG_COMMAND("reformat-fastqs", &cmdReformatFASTQs, "Reformat FASTQs to be ready for STARsolo alignment")
LONG_COMMAND("reformat-fastqs-mt", &cmdReformatFASTQsMT, "Reformat FASTQs to be ready for STARsolo alignment (multithreaded/not working)")
LONG_COMMAND("stratify-fastq-by-barcodes", &cmdStratifyFASTQByBarcodes, "Stratify FASTQ files by spatial barcodes and UMIs")
LONG_COMMAND_GROUP("Image Tools", NULL)
LONG_COMMAND("draw-3way", &cmdDraw3way, "Draw the 3-way image from the output of sttools pipeline")
LONG_COMMAND("draw-sge", &cmdDrawSGE, "Draw the image of spatial gene expression (SGE) data")
LONG_COMMAND("draw-xy", &cmdDrawXY, "Draw the image of points in 2D space")
LONG_COMMAND("draw-tsv", &cmdDrawTSV, "Draw the image of TSV-formatted spatial gene expression data")
LONG_COMMAND("draw-polygons", &cmdDrawPolygons, "Draw polygons based on JSON input")
LONG_COMMAND("png-mono2rgba", &cmdPngMono2RGBA, "Convert a monochrome PNG image to RGBA format")
LONG_COMMAND_GROUP("Other Tools", NULL)
LONG_COMMAND("hist", &cmdHist, "Create a text-based histogram")
LONG_COMMAND("reformat-tsv", &cmdReformatTsv, "Reformat TSV/CSV files by selecting or reordering columns")
END_LONG_COMMANDS();
cl.Add(new longCommands("Available Commands", longCommandlines));
if (argc < 2)
{
printf("[spatula %s] -- spatial transcriptomics utilities\n\n", SPATULA_VERSION_STRING);
fprintf(stderr, " Copyright (c) 2022-2026 by Hyun Min Kang\n");
fprintf(stderr, " Licensed under the Apache License v2.0 http://www.apache.org/licenses/\n\n");
fprintf(stderr, "To run a specific command : %s [command] [options]\n", argv[0]);
fprintf(stderr, "For detailed instructions, run : %s --help\n", argv[0]);
cl.Status();
return 1;
}
else
{
if (strcmp(argv[1], "--help") == 0)
{
cl.HelpMessage();
}
else
{
return cl.Read(argc, argv);
}
}
return 0;
}