tbtools-cli 1.2.0__py3-none-any.whl
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.
- tbtools_cli/__init__.py +18 -0
- tbtools_cli/auto_commands.py +1149 -0
- tbtools_cli/cli.py +528 -0
- tbtools_cli/cli_load.py +352 -0
- tbtools_cli/cli_rpc.py +303 -0
- tbtools_cli/cli_tools_registry.py +93 -0
- tbtools_cli/cli_top.py +1160 -0
- tbtools_cli/command_metadata.json +4606 -0
- tbtools_cli/command_spec.py +382 -0
- tbtools_cli/config.example.toml +19 -0
- tbtools_cli/config.py +43 -0
- tbtools_cli/core.py +508 -0
- tbtools_cli/errors.py +38 -0
- tbtools_cli/presets.py +100 -0
- tbtools_cli/scenarios.py +92 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/AdmixtureCli.java +91 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/AmazingMetaCli.java +78 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/AssemblyRecommandCli.java +47 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/BamIndexCli.java +31 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/BamSortCli.java +43 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/BamStateCli.java +49 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/BarPlotterCli.java +18 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/BarplotCli.java +168 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/BatchVizMotifsCli.java +47 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/BlastXmlConvertCli.java +45 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/BlatExecutorCli.java +66 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/CalcRepeatCli.java +62 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/CalculateSimilarityCli.java +34 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/CddMotifCli.java +46 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/CircleGeneViewerCli.java +81 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/CircosCli.java +76 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/ColorSchemeCli.java +29 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/CtgGroupCli.java +29 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/CubeHeatmapCli.java +70 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/DeHistCli.java +46 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/DegramdomCli.java +33 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/DiffExpCli.java +44 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/DistanceCli.java +53 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/DualSynCli.java +147 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/EggnogCli.java +39 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/ExprCorrCli.java +27 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/FastaMergerCli.java +36 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/FastaTableConvertCli.java +38 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/FileCleanerCli.java +31 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/FileSplitCli.java +15 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/FindBlockDualCli.java +71 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/FindBlockMultipleCli.java +67 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/FindPathCli.java +15 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/GSEAWrapperCli.java +33 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/GenBank2FastaCli.java +32 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/GeneDensityCli.java +38 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/GeneLocGffCli.java +140 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/GeneStructureCli.java +90 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/GenericCli.java +177 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/GetENALinksCli.java +36 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/GetSubNewickTreeCli.java +50 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/GoEnrichCli.java +42 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/GoLevelCli.java +59 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/GroupedBarCli.java +95 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/GsaDiagCli.java +45 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/GxfFilterCli.java +39 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/GxfSortCli.java +23 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/HclustCli.java +43 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/HeatmapCli.java +89 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/HmmerSuiteCli.java +47 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/JgblocksCli.java +65 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/KeggEnrichCli.java +31 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/LayoutHeatmapCli.java +90 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/MCScanXCli.java +80 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/MCScanXFastCli.java +41 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/MSACli.java +46 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/MakeMotifCli.java +39 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/MarkerDesignCli.java +62 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/MarkerToolsCli.java +57 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/Mast2TabCli.java +27 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/MastCli.java +54 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/MastRunCli.java +39 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/Meme2TabCli.java +26 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/MemeCli.java +74 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/MemeRunCli.java +40 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/MgGxfCli.java +35 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/MicroSynCli.java +118 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/MirIdentifyCli.java +55 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/MotifCli.java +75 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/MotifPatternCli.java +67 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/MotifShiftCli.java +30 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/MountainPlotCli.java +44 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/MultiSuperHeatCli.java +64 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/NeedlemanWunschCli.java +76 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/PafGC.java +15 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/PafVizCli.java +67 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/PeakDistCli.java +58 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/Pep2CodonCli.java +26 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/PfamMotifCli.java +43 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/PhyloTreeCli.java +92 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/PileUpCli.java +55 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/PlantCAREResultClassifyCli.java +36 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/PubmedSearchCli.java +25 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/QpcrCli.java +69 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/QpcrDdctCli.java +28 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/QpcrProcCli.java +28 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/QuickGenomeDotCli.java +66 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/QuickProteinAnnoCli.java +34 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/QuickRunIQtreeCli.java +69 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/QuickTrimALCli.java +67 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/RNAplotCli.java +129 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/RegionBedToGFF3Cli.java +43 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/RegionDepthCli.java +29 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/SamBamCovCli.java +33 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/SeqConverterCli.java +17 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/SeqLenTrackCli.java +41 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/SeveralSpeciesCli.java +132 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/SimpleEnricherCli.java +44 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/SimpleHmmscanCli.java +32 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/SixFrameTranlaterCli.java +35 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/StructAnnoCompareCli.java +66 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/SubmitSMARTCli.java +30 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/SuperCircosCli.java +330 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/TableColManipCli.java +56 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/TableCollapseCli.java +33 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/TargetScoreCli.java +47 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/TauCalcCli.java +28 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/TaxonomyBatchCli.java +72 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/TreeCli.java +75 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/TreeRootingCli.java +30 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/TrimMSACli.java +33 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/UnrootedTreeCli.java +44 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/UpSetCli.java +90 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/Venn5Cli.java +60 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/Venn6Cli.java +65 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/ViolinCli.java +66 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/VisualizeCli.java +57 -0
- tbtools_cli-1.2.0.data/data/tbtools_cli/bridges/VizGFACli.java +39 -0
- tbtools_cli-1.2.0.dist-info/METADATA +504 -0
- tbtools_cli-1.2.0.dist-info/RECORD +139 -0
- tbtools_cli-1.2.0.dist-info/WHEEL +5 -0
- tbtools_cli-1.2.0.dist-info/entry_points.txt +2 -0
- tbtools_cli-1.2.0.dist-info/licenses/LICENSE +21 -0
- tbtools_cli-1.2.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import biocjava.bioIO.BioSoftPipeServer.QuickTrimAL;
|
|
2
|
+
import biocjava.bioIO.BioSoftPipeServer.QuickTrimAL.AUTOMOD;
|
|
3
|
+
import biocjava.bioIO.BioSoftPipeServer.QuickTrimAL.OUTFORMAT;
|
|
4
|
+
|
|
5
|
+
import java.io.File;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* tbplot trimal — trimAl 比对修剪 CLI(GUI 逆向 #29,09/20)
|
|
9
|
+
*
|
|
10
|
+
* 用法: QuickTrimALCli <in.aln> <out.aln> [--mode gappyout|strict|strictplus|automated1]
|
|
11
|
+
* [--format fasta|clustal|phylip|nexus|mega|nbrf] [--keepheader]
|
|
12
|
+
* in: 比对后 FASTA(muscle 产物)
|
|
13
|
+
* out: 修剪后比对
|
|
14
|
+
* --mode: 自动修剪模式(默认 automated1;gappyout=按 gap 分布/strict=严格/strictplus=更严格)
|
|
15
|
+
* --format: 输出格式(默认 fasta)
|
|
16
|
+
* --keepheader: 保留完整序列头
|
|
17
|
+
*
|
|
18
|
+
* 引擎: QuickTrimAL(GUI 逆向:TrimalGUIPanel $3 StartButton 回调
|
|
19
|
+
* → setInFile/setOutFile/setOutfmt/setTrimMode/setKeepallheader/trim;
|
|
20
|
+
* 引擎调系统 trimal 二进制,v1.5 语法兼容)
|
|
21
|
+
* 依赖: 系统 trimal
|
|
22
|
+
*/
|
|
23
|
+
public class QuickTrimALCli {
|
|
24
|
+
public static void main(String[] args) throws Exception {
|
|
25
|
+
if (args.length < 2) {
|
|
26
|
+
System.err.println("用法: QuickTrimALCli <in.aln> <out.aln> [--mode gappyout|strict|strictplus|automated1] [--format fasta|clustal|phylip|nexus|mega|nbrf] [--keepheader]");
|
|
27
|
+
System.exit(1);
|
|
28
|
+
}
|
|
29
|
+
File inFile = new File(args[0]);
|
|
30
|
+
File outFile = new File(args[1]);
|
|
31
|
+
QuickTrimAL qta = new QuickTrimAL();
|
|
32
|
+
qta.setInFile(inFile);
|
|
33
|
+
qta.setOutFile(outFile);
|
|
34
|
+
qta.setTrimMode(AUTOMOD.ML_AUTOMATED1);
|
|
35
|
+
qta.setOutfmt(OUTFORMAT.FASTA);
|
|
36
|
+
for (int i = 2; i < args.length; i++) {
|
|
37
|
+
switch (args[i]) {
|
|
38
|
+
case "--mode":
|
|
39
|
+
String m = args[++i].toLowerCase();
|
|
40
|
+
if (m.equals("gappyout")) qta.setTrimMode(AUTOMOD.GAPPYOUT);
|
|
41
|
+
else if (m.equals("strict")) qta.setTrimMode(AUTOMOD.STRICT);
|
|
42
|
+
else if (m.equals("strictplus")) qta.setTrimMode(AUTOMOD.NJ_STRICTPLUS);
|
|
43
|
+
else qta.setTrimMode(AUTOMOD.ML_AUTOMATED1);
|
|
44
|
+
break;
|
|
45
|
+
case "--format":
|
|
46
|
+
String f = args[++i].toLowerCase();
|
|
47
|
+
if (f.equals("clustal")) qta.setOutfmt(OUTFORMAT.CLUSTAL);
|
|
48
|
+
else if (f.equals("phylip")) qta.setOutfmt(OUTFORMAT.PHYLIP);
|
|
49
|
+
else if (f.equals("nexus")) qta.setOutfmt(OUTFORMAT.NEXUS);
|
|
50
|
+
else if (f.equals("mega")) qta.setOutfmt(OUTFORMAT.MEGA);
|
|
51
|
+
else if (f.equals("nbrf")) qta.setOutfmt(OUTFORMAT.NBRF);
|
|
52
|
+
else qta.setOutfmt(OUTFORMAT.FASTA);
|
|
53
|
+
break;
|
|
54
|
+
case "--keepheader": qta.setKeepallheader(true); break;
|
|
55
|
+
default:
|
|
56
|
+
System.err.println("警告: 忽略未知参数 " + args[i]);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (!inFile.exists()) {
|
|
60
|
+
System.err.println("错误: 输入文件不存在: " + inFile.getAbsolutePath());
|
|
61
|
+
System.exit(2);
|
|
62
|
+
}
|
|
63
|
+
qta.trim();
|
|
64
|
+
System.err.println("[tbplot] trimAl 修剪完成: " + outFile.getAbsolutePath());
|
|
65
|
+
System.exit(0);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import biocjava.bioDoer.JIGplotToolkit.miRCoverage.RNAplotAdvance;
|
|
2
|
+
import biocjava.bioIO.RNAfold.FoldInfo;
|
|
3
|
+
import biocjava.bioIO.RNAfold.RNAfoldInvoker;
|
|
4
|
+
import jigplot.engine.JIGBasePanel;
|
|
5
|
+
import jigplot.engine.JIGSubPanel;
|
|
6
|
+
|
|
7
|
+
import java.awt.geom.Point2D;
|
|
8
|
+
import java.io.File;
|
|
9
|
+
import java.io.FileWriter;
|
|
10
|
+
import java.util.ArrayList;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* tbplot rnaplot — TBtools RNA 二级结构绘图 CLI(engine 111,08/31 攻克)
|
|
14
|
+
*
|
|
15
|
+
* 用法: RNAplotCli <seq.fa|rawSeq> <out> [--colorMap "seq1=R,G,B;seq2=R,G,B"] [--interactive false]
|
|
16
|
+
* seq: FASTA 或单行序列
|
|
17
|
+
* out: .svg/.pdf/.png
|
|
18
|
+
*
|
|
19
|
+
* 引擎: RNAplotAdvance(需要 RNAfold/RNAplot 可执行)
|
|
20
|
+
* main() 用 RNAplotInvoker.generatePlotPsFile 管道调 RNAplot → 本机 RNAplot 2.7 不读 stdin 管道,
|
|
21
|
+
* 导致 temp PS 文件不生成 → FileNotFoundException
|
|
22
|
+
* 破解: 绕开 generatePlotPsFile——
|
|
23
|
+
* 1) RNAfoldInvoker.fold(seq) 拿 FoldInfo(seq+structure+mfe)
|
|
24
|
+
* 2) 写 temp.fa(>seq + seq + structure(mfe))→ 本机 RNAplot -i 生成 EPS(含 /sequence /coor /pairs)
|
|
25
|
+
* 3) RNAplotAdvance.transform(EPS, interactive) → JIGSubPanel
|
|
26
|
+
* 4) JIGBasePanel + addSubPanel + save2SVG/PNG/PDF
|
|
27
|
+
*/
|
|
28
|
+
public class RNAplotCli {
|
|
29
|
+
public static void main(String[] args) throws Exception {
|
|
30
|
+
if (args.length < 2) {
|
|
31
|
+
System.err.println("用法: RNAplotCli <seq.fa|rawSeq> <out> [--colorMap \"seq1=R,G,B;...\"] [--interactive false]");
|
|
32
|
+
System.exit(1);
|
|
33
|
+
}
|
|
34
|
+
String inSeq = args[0];
|
|
35
|
+
String outFile = args[1];
|
|
36
|
+
String colorMap = null;
|
|
37
|
+
boolean interactive = false;
|
|
38
|
+
for (int i = 2; i < args.length; i++) {
|
|
39
|
+
if (args[i].equals("--colorMap") && i+1<args.length) colorMap = args[++i];
|
|
40
|
+
else if (args[i].equals("--interactive") && i+1<args.length) interactive = Boolean.parseBoolean(args[++i]);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// 1. 读序列
|
|
44
|
+
String seq = inSeq;
|
|
45
|
+
if (new File(inSeq).exists()) {
|
|
46
|
+
StringBuilder sb = new StringBuilder();
|
|
47
|
+
for (String l : java.nio.file.Files.readAllLines(new File(inSeq).toPath())) {
|
|
48
|
+
if (l.startsWith(">")) continue;
|
|
49
|
+
sb.append(l.trim());
|
|
50
|
+
}
|
|
51
|
+
seq = sb.toString();
|
|
52
|
+
}
|
|
53
|
+
seq = seq.replaceAll("[^ACGUacguTt]", "").toUpperCase().replace('T','U');
|
|
54
|
+
if (seq.isEmpty()) {
|
|
55
|
+
System.err.println("错误: 序列为空");
|
|
56
|
+
System.exit(1);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// 2. RNAfold 折叠
|
|
60
|
+
FoldInfo fi = RNAfoldInvoker.fold(seq);
|
|
61
|
+
System.err.println("[tbplot] 折叠完成: mfe=" + fi.getMfe() + " len=" + fi.getInpuSeq().length());
|
|
62
|
+
|
|
63
|
+
// 3. 写 temp.fa → RNAplot -i 生成 EPS
|
|
64
|
+
File fa = File.createTempFile("rnaplot", ".fa");
|
|
65
|
+
FileWriter fw = new FileWriter(fa);
|
|
66
|
+
fw.write(">seq\n" + fi.getInpuSeq() + "\n" + fi.getFoldStructure() + " (" + String.format("%.1f", fi.getMfe()) + ")\n");
|
|
67
|
+
fw.close();
|
|
68
|
+
String workDir = fa.getParent();
|
|
69
|
+
String epsPrefix = workDir + File.separator + "seq_ss";
|
|
70
|
+
ProcessBuilder pb = new ProcessBuilder("RNAplot", "-i", fa.getAbsolutePath());
|
|
71
|
+
pb.directory(new File(workDir));
|
|
72
|
+
pb.redirectErrorStream(true);
|
|
73
|
+
Process p = pb.start();
|
|
74
|
+
p.waitFor();
|
|
75
|
+
// RNAplot 输出 <name>_ss.eps
|
|
76
|
+
File eps = new File(epsPrefix + ".eps");
|
|
77
|
+
if (!eps.exists()) {
|
|
78
|
+
// 兜底:找目录里任何 *_ss.eps
|
|
79
|
+
File dir = new File(workDir);
|
|
80
|
+
for (File f : dir.listFiles()) {
|
|
81
|
+
if (f.getName().endsWith("_ss.eps") || f.getName().endsWith("_ss.ps")) { eps = f; break; }
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (!eps.exists()) {
|
|
85
|
+
System.err.println("错误: RNAplot 未生成 EPS(工作目录=" + workDir + ")");
|
|
86
|
+
System.exit(1);
|
|
87
|
+
}
|
|
88
|
+
System.err.println("[tbplot] RNAplot EPS: " + eps.getAbsolutePath());
|
|
89
|
+
|
|
90
|
+
// 4. transformat 解析
|
|
91
|
+
RNAplotAdvance ra = new RNAplotAdvance();
|
|
92
|
+
ra.setIsInteractive(interactive);
|
|
93
|
+
JIGSubPanel sub = ra.transformat(eps, interactive);
|
|
94
|
+
|
|
95
|
+
// 5. JIGBasePanel + addSubPanel
|
|
96
|
+
Point2D[] pts = sub.getPoints();
|
|
97
|
+
double minX = Double.MAX_VALUE, minY = Double.MAX_VALUE, maxX = -Double.MAX_VALUE, maxY = -Double.MAX_VALUE;
|
|
98
|
+
if (pts != null) {
|
|
99
|
+
for (Point2D pt : pts) {
|
|
100
|
+
minX = Math.min(minX, pt.getX()); minY = Math.min(minY, pt.getY());
|
|
101
|
+
maxX = Math.max(maxX, pt.getX()); maxY = Math.max(maxY, pt.getY());
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
int w = (int)(maxX - minX) + 200, h = (int)(maxY - minY) + 200;
|
|
105
|
+
if (w < 600) w = 600;
|
|
106
|
+
if (h < 400) h = 400;
|
|
107
|
+
JIGBasePanel base = new JIGBasePanel(w, h);
|
|
108
|
+
base.addSubPanel(sub);
|
|
109
|
+
|
|
110
|
+
// 6. colorMap 高亮(元素引用 subpanel 内部,直接改色即可)
|
|
111
|
+
if (colorMap != null && !colorMap.isEmpty()) {
|
|
112
|
+
ArrayList<jigplot.engine.JIGElement> els = ra.selectEle(colorMap);
|
|
113
|
+
if (els != null) {
|
|
114
|
+
for (jigplot.engine.JIGElement el : els) {
|
|
115
|
+
// 用 colorMap 解析颜色:引擎内部 selectEle 已按 colorMap 上色,这里仅确保刷新
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
base.repaint();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// 7. 保存
|
|
122
|
+
String low = outFile.toLowerCase();
|
|
123
|
+
if (low.endsWith(".png")) base.save2PNG(new File(outFile));
|
|
124
|
+
else if (low.endsWith(".pdf")) base.save2PDF(new File(outFile));
|
|
125
|
+
else base.save2SVG(new File(outFile));
|
|
126
|
+
System.err.println("[tbplot] 已保存: " + outFile);
|
|
127
|
+
System.exit(0);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import biocjava.bioDoer.GXFUtils.RegionBedToGFF3;
|
|
2
|
+
|
|
3
|
+
import java.io.File;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* tbplot bed2gff3 — exon BED → GFF3 转换 CLI(GUI 逆向 #21,09/20)
|
|
7
|
+
*
|
|
8
|
+
* 用法: RegionBedToGFF3Cli <in.bed> <out.gff3> [genome.fa]
|
|
9
|
+
* in: BED 文件(染色体 起始 结束 ID:链向:编码)
|
|
10
|
+
* ⚠️ 第 4 列必须是 ID:strand:coding 格式,如 G01:+:C(coding=C 编码/N 非编码;
|
|
11
|
+
* 同 ID 多行会按坐标排序合并出 mRNA+exon 层级,start 自动 +1 转 1-based)
|
|
12
|
+
* out: GFF3(自动补 .gff3 后缀)
|
|
13
|
+
* genome.fa: 可选基因组(存在则做 ORF 相关注释)
|
|
14
|
+
*
|
|
15
|
+
* 引擎: RegionBedToGFF3(GUI 逆向:ExonBedToGFF3GUIPanel $4 StartButton 回调
|
|
16
|
+
* → setInBedFile/setOutGff3/[setInGenomeFile]/process,main() 无 ArgsParser)
|
|
17
|
+
*/
|
|
18
|
+
public class RegionBedToGFF3Cli {
|
|
19
|
+
public static void main(String[] args) throws Exception {
|
|
20
|
+
if (args.length < 2) {
|
|
21
|
+
System.err.println("用法: RegionBedToGFF3Cli <in.bed> <out.gff3> [genome.fa]");
|
|
22
|
+
System.exit(1);
|
|
23
|
+
}
|
|
24
|
+
File inBed = new File(args[0]);
|
|
25
|
+
File outGff3 = new File(args[1]);
|
|
26
|
+
if (!outGff3.getName().toLowerCase().endsWith(".gff3")) {
|
|
27
|
+
outGff3 = new File(outGff3.getAbsolutePath() + ".gff3");
|
|
28
|
+
}
|
|
29
|
+
if (!inBed.exists()) {
|
|
30
|
+
System.err.println("错误: 输入 BED 不存在: " + inBed.getAbsolutePath());
|
|
31
|
+
System.exit(2);
|
|
32
|
+
}
|
|
33
|
+
RegionBedToGFF3 rbtg = new RegionBedToGFF3();
|
|
34
|
+
rbtg.setInBedFile(inBed);
|
|
35
|
+
rbtg.setOutGff3(outGff3);
|
|
36
|
+
if (args.length > 2 && new File(args[2]).exists()) {
|
|
37
|
+
rbtg.setInGenomeFile(new File(args[2]));
|
|
38
|
+
}
|
|
39
|
+
rbtg.process();
|
|
40
|
+
System.err.println("[tbplot] BED→GFF3 完成: " + outGff3.getAbsolutePath());
|
|
41
|
+
System.exit(0);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import biocjava.bioDoer.JIGplotToolkit.miRCoverage.CalcRegionDepth;
|
|
2
|
+
|
|
3
|
+
import java.io.File;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* tbcli regiondepth — SAM 区域覆盖深度 CLI(08/31 第七十六波)
|
|
7
|
+
*
|
|
8
|
+
* 用法: RegionDepthCli <in.sam> <region> <out.depth> [scaleFactor]
|
|
9
|
+
* in.sam: 已排序或未排序 SAM(内部自动按位置排序+建索引)
|
|
10
|
+
* region: ChrID:Start-End 或 ChrID#Start#End(1-based)
|
|
11
|
+
* out.depth: 每碱基覆盖深度
|
|
12
|
+
* scaleFactor: 缩放因子(默认 1)
|
|
13
|
+
*
|
|
14
|
+
* 引擎: CalcRegionDepth.init() + processRegion()(main 硬编码演示 → setter+process)
|
|
15
|
+
*/
|
|
16
|
+
public class RegionDepthCli {
|
|
17
|
+
public static void main(String[] args) throws Exception {
|
|
18
|
+
if (args.length < 3) {
|
|
19
|
+
System.err.println("用法: RegionDepthCli <in.sam> <region> <out.depth> [scaleFactor]");
|
|
20
|
+
System.exit(1);
|
|
21
|
+
}
|
|
22
|
+
int scale = args.length > 3 ? Integer.parseInt(args[3]) : 1;
|
|
23
|
+
CalcRegionDepth crd = new CalcRegionDepth();
|
|
24
|
+
crd.init(new File(args[0]));
|
|
25
|
+
crd.processRegion(args[1], new File(args[2]), scale);
|
|
26
|
+
System.err.println("[tbplot] 已保存: " + args[2] + " (region=" + args[1] + ")");
|
|
27
|
+
System.exit(0);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import biocjava.bioIO.HTSData.SAMBAM.SamBamBINCov;
|
|
2
|
+
|
|
3
|
+
import java.io.File;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* tbcli sambamcov — BAM bin 覆盖统计 CLI(08/31 第七十一波)
|
|
7
|
+
*
|
|
8
|
+
* 用法: SamBamCovCli <in.bam> <out.tsv> [binSize] [countMode]
|
|
9
|
+
* binSize: 窗口大小 bp(默认 1000)
|
|
10
|
+
* countMode: Overlap|StartPos|EndPos(默认 Overlap)
|
|
11
|
+
*
|
|
12
|
+
* 引擎: SamBamBINCov.setInXamFile/setOutBINCovFile/setBINsize/setCountMode + process()
|
|
13
|
+
* (main 硬编码演示 → setter+process)
|
|
14
|
+
*/
|
|
15
|
+
public class SamBamCovCli {
|
|
16
|
+
public static void main(String[] args) throws Exception {
|
|
17
|
+
if (args.length < 2) {
|
|
18
|
+
System.err.println("用法: SamBamCovCli <in.bam> <out.tsv> [binSize] [countMode]");
|
|
19
|
+
System.exit(1);
|
|
20
|
+
}
|
|
21
|
+
int binSize = args.length > 2 ? Integer.parseInt(args[2]) : 1000;
|
|
22
|
+
String cm = args.length > 3 ? args[3] : "Overlap";
|
|
23
|
+
|
|
24
|
+
SamBamBINCov sbbc = new SamBamBINCov();
|
|
25
|
+
sbbc.setInXamFile(new File(args[0]));
|
|
26
|
+
sbbc.setOutBINCovFile(new File(args[1]));
|
|
27
|
+
sbbc.setBINsize(binSize);
|
|
28
|
+
sbbc.setCountMode(SamBamBINCov.CountMode.valueOf(cm));
|
|
29
|
+
sbbc.process();
|
|
30
|
+
System.err.println("[tbplot] 已保存: " + args[1] + " (binSize=" + binSize + ", mode=" + cm + ")");
|
|
31
|
+
System.exit(0);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import biocjava.bioIO.SeqFormatConvert.seqFactory.SeqConverter;
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* tbcli seqConverter 桥 — 序列格式转换 CLI(08/31)
|
|
5
|
+
*
|
|
6
|
+
* 用法: SeqConverterCli -i <in> -o <out> -iF <fmt> -oF <fmt>
|
|
7
|
+
* fmt: fasta|clustal|MEGA|nexus|PAML|phylip
|
|
8
|
+
*
|
|
9
|
+
* ⚠️ SeqConverter.main 是硬编码演示 → 真实 CLI 入口是 main1(public static)
|
|
10
|
+
* (main1 ≠ main 规律:PafGenomeComp/SeqConverter 同型)
|
|
11
|
+
*/
|
|
12
|
+
public class SeqConverterCli {
|
|
13
|
+
public static void main(String[] args) throws Exception {
|
|
14
|
+
SeqConverter.main1(args);
|
|
15
|
+
System.exit(0);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import biocjava.bioDoer.MEME.DrawMotifPattern.DrawSequenceFromSeqLenInfo;
|
|
2
|
+
import jigplot.engine.JIGBasePanel;
|
|
3
|
+
import jigplot.engine.JIGSubPanel;
|
|
4
|
+
|
|
5
|
+
import java.io.File;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* tbcli seqlentrack — 序列长度骨架图 CLI(08/31 第八十波,引擎 122)
|
|
9
|
+
*
|
|
10
|
+
* 用法: SeqLenTrackCli <seqlen.txt> <out.svg|png|pdf> [newick.treefile]
|
|
11
|
+
* seqlen.txt: gene\tlength(每行一个基因;# 开头跳过)
|
|
12
|
+
* newick.treefile: 可选进化树(排序基因)
|
|
13
|
+
*
|
|
14
|
+
* 引擎: DrawSequenceFromSeqLenInfo(继承 DrawMotifPatternFromMEMEResult.postGraph(newick, panel))
|
|
15
|
+
* (AmazingMetaPlot 的 CDD 面板底层——基因长度骨架图)
|
|
16
|
+
*/
|
|
17
|
+
public class SeqLenTrackCli {
|
|
18
|
+
public static void main(String[] args) throws Exception {
|
|
19
|
+
if (args.length < 2) {
|
|
20
|
+
System.err.println("用法: SeqLenTrackCli <seqlen.txt> <out.svg|png|pdf> [newick.treefile]");
|
|
21
|
+
System.exit(1);
|
|
22
|
+
}
|
|
23
|
+
String newick = "";
|
|
24
|
+
if (args.length > 2) {
|
|
25
|
+
File tf = new File(args[2]);
|
|
26
|
+
if (tf.exists()) newick = new String(java.nio.file.Files.readAllBytes(tf.toPath()), "UTF-8").trim();
|
|
27
|
+
}
|
|
28
|
+
DrawSequenceFromSeqLenInfo dmp = new DrawSequenceFromSeqLenInfo();
|
|
29
|
+
dmp.setInFile(new File(args[0]));
|
|
30
|
+
JIGBasePanel jigPanel = new JIGBasePanel(1200, 800);
|
|
31
|
+
JIGSubPanel sp = dmp.postGraph(newick, jigPanel);
|
|
32
|
+
jigPanel.addSubPanel(sp);
|
|
33
|
+
String out = args[1];
|
|
34
|
+
String low = out.toLowerCase();
|
|
35
|
+
if (low.endsWith(".png")) jigPanel.save2PNG(new File(out));
|
|
36
|
+
else if (low.endsWith(".pdf")) jigPanel.save2PDF(new File(out));
|
|
37
|
+
else jigPanel.save2SVG(new File(out));
|
|
38
|
+
System.err.println("[tbplot] 已保存: " + out);
|
|
39
|
+
System.exit(0);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import biocjava.bioDoer.JIGplotToolkit.Synteny.SeveralSpeciesMicroSyntenicAnalysisAdvance;
|
|
2
|
+
import jigplot.engine.JIGBasePanel;
|
|
3
|
+
|
|
4
|
+
import java.awt.Component;
|
|
5
|
+
import java.awt.Container;
|
|
6
|
+
import java.awt.Window;
|
|
7
|
+
import java.io.BufferedReader;
|
|
8
|
+
import java.io.File;
|
|
9
|
+
import java.io.FileReader;
|
|
10
|
+
import java.util.ArrayList;
|
|
11
|
+
import java.util.LinkedHashSet;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* tbplot multisyn — TBtools 多物种微共线性分析图 CLI(08/29 新增,第 33 引擎)
|
|
15
|
+
*
|
|
16
|
+
* 用法: SeveralSpeciesCli <gxf.lst> <collinear.lst> <out> [--genes idlist.txt]
|
|
17
|
+
* gxf.lst: 每行一个 GXF/GFF 注释文件路径
|
|
18
|
+
* collinear.lst: 每行一个 MCScanX collinearity 文件路径(与 GXF 对应配对)
|
|
19
|
+
* --genes: 高亮基因 ID 列表(可选)
|
|
20
|
+
*
|
|
21
|
+
* 引擎: SeveralSpeciesMicroSyntenicAnalysisAdvance
|
|
22
|
+
* setGxfArr(ArrayList<File>) + setCollinearFileArr + setSpecificGenesList
|
|
23
|
+
* process() 内部用 JIG 引擎(JIGBasePanel)→ 窗口遍历保存
|
|
24
|
+
*/
|
|
25
|
+
public class SeveralSpeciesCli {
|
|
26
|
+
public static void main(String[] args) throws Exception {
|
|
27
|
+
if (args.length < 3) {
|
|
28
|
+
System.err.println("用法: SeveralSpeciesCli <gxf.lst> <collinear.lst> <out> [--genes idlist.txt]");
|
|
29
|
+
System.exit(1);
|
|
30
|
+
}
|
|
31
|
+
String gxfLst = args[0];
|
|
32
|
+
String collinearLst = args[1];
|
|
33
|
+
String outFile = args[2];
|
|
34
|
+
String genesFile = null;
|
|
35
|
+
for (int i = 3; i < args.length; i++) {
|
|
36
|
+
if (args[i].equals("--genes") && i+1<args.length) genesFile = args[++i];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// 读 GXF 列表
|
|
40
|
+
ArrayList<File> gxfArr = new ArrayList<File>();
|
|
41
|
+
BufferedReader br = new BufferedReader(new FileReader(gxfLst));
|
|
42
|
+
String line;
|
|
43
|
+
while ((line = br.readLine()) != null) {
|
|
44
|
+
line = line.trim();
|
|
45
|
+
if (!line.isEmpty() && !line.startsWith("#")) gxfArr.add(new File(line));
|
|
46
|
+
}
|
|
47
|
+
br.close();
|
|
48
|
+
System.err.println("[tbplot] GXF 数: " + gxfArr.size());
|
|
49
|
+
|
|
50
|
+
// 读 collinearity 列表
|
|
51
|
+
ArrayList<File> collinearArr = new ArrayList<File>();
|
|
52
|
+
br = new BufferedReader(new FileReader(collinearLst));
|
|
53
|
+
while ((line = br.readLine()) != null) {
|
|
54
|
+
line = line.trim();
|
|
55
|
+
if (!line.isEmpty() && !line.startsWith("#")) collinearArr.add(new File(line));
|
|
56
|
+
}
|
|
57
|
+
br.close();
|
|
58
|
+
System.err.println("[tbplot] collinearity 数: " + collinearArr.size());
|
|
59
|
+
|
|
60
|
+
SeveralSpeciesMicroSyntenicAnalysisAdvance engine = new SeveralSpeciesMicroSyntenicAnalysisAdvance();
|
|
61
|
+
engine.setGxfArr(gxfArr);
|
|
62
|
+
engine.setCollinearFileArr(collinearArr);
|
|
63
|
+
// specificGenesList 是必需(process() 检查 isEmpty)——无 --genes 时从第一个 GXF 提取所有基因
|
|
64
|
+
LinkedHashSet<String> genes = new LinkedHashSet<String>();
|
|
65
|
+
if (genesFile != null) {
|
|
66
|
+
br = new BufferedReader(new FileReader(genesFile));
|
|
67
|
+
while ((line = br.readLine()) != null) {
|
|
68
|
+
line = line.trim();
|
|
69
|
+
if (!line.isEmpty() && !line.startsWith("#")) genes.add(line);
|
|
70
|
+
}
|
|
71
|
+
br.close();
|
|
72
|
+
} else {
|
|
73
|
+
// 自动从第一个 GXF 提取所有 mRNA 基因名
|
|
74
|
+
BufferedReader gxfr = new BufferedReader(new FileReader(gxfArr.get(0)));
|
|
75
|
+
while ((line = gxfr.readLine()) != null) {
|
|
76
|
+
if (line.startsWith("#")) continue;
|
|
77
|
+
String[] f = line.split("\t");
|
|
78
|
+
if (f.length >= 9 && (f[2].equals("mRNA") || f[2].equals("transcript"))) {
|
|
79
|
+
String id = extractAttr(f[8], "ID");
|
|
80
|
+
if (id != null) genes.add(id);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
gxfr.close();
|
|
84
|
+
System.err.println("[tbplot] 自动提取基因数: " + genes.size());
|
|
85
|
+
}
|
|
86
|
+
engine.setSpecificGenesList(genes);
|
|
87
|
+
System.err.println("[tbplot] 高亮基因: " + genes.size());
|
|
88
|
+
engine.process(); // 内部 JIGBasePanel 弹窗
|
|
89
|
+
|
|
90
|
+
// 窗口遍历
|
|
91
|
+
JIGBasePanel panel = null;
|
|
92
|
+
Window[] windows = Window.getWindows();
|
|
93
|
+
System.err.println("[tbplot] 窗口数: " + windows.length);
|
|
94
|
+
for (Window w : windows) {
|
|
95
|
+
JIGBasePanel found = findBasePanel(w);
|
|
96
|
+
if (found != null) { panel = found; break; }
|
|
97
|
+
}
|
|
98
|
+
if (panel == null) {
|
|
99
|
+
System.err.println("错误: 未找到 JIGBasePanel");
|
|
100
|
+
System.exit(1);
|
|
101
|
+
}
|
|
102
|
+
// 多物种引擎内部 panel 可能未设置尺寸 → 保存前显式设置(避免 BufferedImage 0 尺寸崩溃)
|
|
103
|
+
panel.setSize(new java.awt.Dimension(1600, 1200));
|
|
104
|
+
panel.setPreferredSize(new java.awt.Dimension(1600, 1200));
|
|
105
|
+
String low = outFile.toLowerCase();
|
|
106
|
+
if (low.endsWith(".png")) panel.save2PNG(new File(outFile));
|
|
107
|
+
else if (low.endsWith(".pdf")) panel.save2PDF(new File(outFile));
|
|
108
|
+
else panel.save2SVG(new File(outFile));
|
|
109
|
+
System.err.println("[tbplot] 已保存: " + outFile);
|
|
110
|
+
System.exit(0);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
static JIGBasePanel findBasePanel(Component c) {
|
|
114
|
+
if (c instanceof JIGBasePanel) return (JIGBasePanel) c;
|
|
115
|
+
if (c instanceof Container) {
|
|
116
|
+
Component[] comps = ((Container) c).getComponents();
|
|
117
|
+
for (Component comp : comps) {
|
|
118
|
+
JIGBasePanel found = findBasePanel(comp);
|
|
119
|
+
if (found != null) return found;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
static String extractAttr(String attrs, String key) {
|
|
126
|
+
for (String part : attrs.split(";")) {
|
|
127
|
+
String[] kv = part.trim().split("=", 2);
|
|
128
|
+
if (kv.length == 2 && kv[0].equals(key)) return kv[1].trim();
|
|
129
|
+
}
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tbplot sricher — 简单富集分析 CLI(GUI 面板逆向接口,09/20)
|
|
3
|
+
*
|
|
4
|
+
* 用法: SimpleEnricherCli <in.tsv> <out.xls> <totalAnnoIdx> <totalHitIdx> <selAnnoIdx> <selHitIdx>
|
|
5
|
+
* [--header] [--sample-id-col N]
|
|
6
|
+
*
|
|
7
|
+
* 接口来源:反编译 SimpleEnricherGUIPanel(GUI 真实调用链):
|
|
8
|
+
* SimpleEnricher se = new SimpleEnricher();
|
|
9
|
+
* se.setTotalAnnoCountIndex(i); se.setTotalHitCountIndex(j);
|
|
10
|
+
* se.setSelectedAnnoCountIndex(k); se.setSelectedHitCountIndex(l);
|
|
11
|
+
* se.setHeader(bool); se.setInTable(file); se.setOutTable(file); se.process();
|
|
12
|
+
*
|
|
13
|
+
* 输入表要求:每行一个条目,含 4 个计数列(列索引 0-based):
|
|
14
|
+
* [.., 总注释数, 总命中数, 选择集注释数, 选择集命中数, ..]
|
|
15
|
+
* 引擎对每行做超几何/Fisher 富集,输出 P 值(富集显著性排序)。
|
|
16
|
+
* 这是 goEnrich 的轻量版——无需 OBO,直接喂计数表。
|
|
17
|
+
*/
|
|
18
|
+
public class SimpleEnricherCli {
|
|
19
|
+
public static void main(String[] args) throws Exception {
|
|
20
|
+
boolean header = false;
|
|
21
|
+
java.util.ArrayList<String> pos = new java.util.ArrayList<String>();
|
|
22
|
+
for (int i = 0; i < args.length; i++) {
|
|
23
|
+
if (args[i].equals("--header")) header = true;
|
|
24
|
+
else pos.add(args[i]);
|
|
25
|
+
}
|
|
26
|
+
if (pos.size() < 6) {
|
|
27
|
+
System.err.println("用法: SimpleEnricherCli <in.tsv> <out.xls> <totalAnnoIdx> <totalHitIdx> <selAnnoIdx> <selHitIdx> [--header]");
|
|
28
|
+
System.exit(1);
|
|
29
|
+
}
|
|
30
|
+
Object se = Class.forName("biocjava.bioIO.GeneOntology.EnrichMent.SimpleEnricher")
|
|
31
|
+
.getDeclaredConstructor().newInstance();
|
|
32
|
+
Class<?> c = se.getClass();
|
|
33
|
+
c.getMethod("setInTable", java.io.File.class).invoke(se, new java.io.File(pos.get(0)));
|
|
34
|
+
c.getMethod("setOutTable", java.io.File.class).invoke(se, new java.io.File(pos.get(1)));
|
|
35
|
+
c.getMethod("setTotalAnnoCountIndex", int.class).invoke(se, Integer.parseInt(pos.get(2)));
|
|
36
|
+
c.getMethod("setTotalHitCountIndex", int.class).invoke(se, Integer.parseInt(pos.get(3)));
|
|
37
|
+
c.getMethod("setSelectedAnnoCountIndex", int.class).invoke(se, Integer.parseInt(pos.get(4)));
|
|
38
|
+
c.getMethod("setSelectedHitCountIndex", int.class).invoke(se, Integer.parseInt(pos.get(5)));
|
|
39
|
+
c.getMethod("setHeader", boolean.class).invoke(se, header);
|
|
40
|
+
c.getMethod("process").invoke(se);
|
|
41
|
+
System.err.println("[tbplot] 已保存: " + pos.get(1));
|
|
42
|
+
System.exit(0);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import biocjava.bioDoer.LinuxPipe.simpleHmmscan;
|
|
2
|
+
|
|
3
|
+
import java.io.File;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* tbcli simpleHmmscan — Pfam 域快速扫描 CLI(08/31 第七十三波)
|
|
7
|
+
*
|
|
8
|
+
* 用法: SimpleHmmscanCli <pfamA.hmm> <target.pep> <idList.txt> <out.txt>
|
|
9
|
+
* pfamA.hmm: Pfam-A.hmm 数据库(需已 hmmindex)
|
|
10
|
+
* target.pep: 待扫描蛋白
|
|
11
|
+
* idList.txt: 感兴趣 Pfam ID 列表(每行一个,如 GRAS)
|
|
12
|
+
* out.txt: 输出
|
|
13
|
+
*
|
|
14
|
+
* 引擎: simpleHmmscan.setPfamHmmA/setTargetPep/setPfamIdList/setFinalOutFile + process()
|
|
15
|
+
* (main 硬编码演示 → setter+process;调系统 hmmsearch)
|
|
16
|
+
*/
|
|
17
|
+
public class SimpleHmmscanCli {
|
|
18
|
+
public static void main(String[] args) throws Exception {
|
|
19
|
+
if (args.length < 4) {
|
|
20
|
+
System.err.println("用法: SimpleHmmscanCli <pfamA.hmm> <target.pep> <idList.txt> <out.txt>");
|
|
21
|
+
System.exit(1);
|
|
22
|
+
}
|
|
23
|
+
simpleHmmscan sh = new simpleHmmscan();
|
|
24
|
+
sh.setPfamHmmA(new File(args[0]));
|
|
25
|
+
sh.setTargetPep(new File(args[1]));
|
|
26
|
+
sh.setPfamIdList(new File(args[2]));
|
|
27
|
+
sh.setFinalOutFile(new File(args[3]));
|
|
28
|
+
sh.process();
|
|
29
|
+
System.err.println("[tbplot] 已保存: " + args[3]);
|
|
30
|
+
System.exit(0);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import biocjava.bioIO.ORF.SixFrameTranlater;
|
|
2
|
+
|
|
3
|
+
import java.io.File;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* tbplot sixframe — TBtools 六框翻译 CLI(GUI 逆向 #16,09/20)
|
|
7
|
+
*
|
|
8
|
+
* 用法: SixFrameTranlaterCli <in.fa> <out.fa>
|
|
9
|
+
* in: 核酸 FASTA
|
|
10
|
+
* out: 六框翻译蛋白 FASTA(+1/+2/+3/-1/-2/-3 六条序列)
|
|
11
|
+
*
|
|
12
|
+
* 引擎: SixFrameTranlater(GUI 逆向:SixFrameTranslatorGUIPanel StartButton 回调
|
|
13
|
+
* → setInFile/setOutFile/process 三连,main() 是硬编码路径演示无 ArgsParser)
|
|
14
|
+
* 注意引擎类名拼写是 SixFrameTranlater(少一个 s),不要按英文习惯拼对。
|
|
15
|
+
*/
|
|
16
|
+
public class SixFrameTranlaterCli {
|
|
17
|
+
public static void main(String[] args) throws Exception {
|
|
18
|
+
if (args.length < 2) {
|
|
19
|
+
System.err.println("用法: SixFrameTranlaterCli <in.fa> <out.fa>");
|
|
20
|
+
System.exit(1);
|
|
21
|
+
}
|
|
22
|
+
File inFa = new File(args[0]);
|
|
23
|
+
File outFa = new File(args[1]);
|
|
24
|
+
if (!inFa.exists()) {
|
|
25
|
+
System.err.println("错误: 输入文件不存在: " + inFa.getAbsolutePath());
|
|
26
|
+
System.exit(2);
|
|
27
|
+
}
|
|
28
|
+
SixFrameTranlater sft = new SixFrameTranlater();
|
|
29
|
+
sft.setInFile(inFa);
|
|
30
|
+
sft.setOutFile(outFa);
|
|
31
|
+
sft.process();
|
|
32
|
+
System.err.println("[tbplot] 六框翻译完成: " + outFa.getAbsolutePath());
|
|
33
|
+
System.exit(0);
|
|
34
|
+
}
|
|
35
|
+
}
|