Mercurial > repos > bgruening > tapscan
changeset 0:196795831b6a draft
planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/tools/tapscan commit 2e1cd301fb38af8a1e9267fc60fcb5ca3c576aeb
author | bgruening |
---|---|
date | Wed, 14 Feb 2024 13:54:16 +0000 |
parents | |
children | c4f865bd101a |
files | tapscan.xml tapscan_coverage_values_v10.txt tapscan_domains_v12.txt.gz tapscan_rules_v81.txt tapscan_script_v74.pl test-data/PUBLIC_Ectocarpus-sp7_proteins_head.fa test-data/output.1.tsv test-data/output.2.tsv test-data/output.3.tsv test-data/output.domtbl.tsv |
diffstat | 10 files changed, 1713 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tapscan.xml Wed Feb 14 13:54:16 2024 +0000 @@ -0,0 +1,126 @@ +<tool id="tapscan_classify" name="TAPScan Classify" version="4.74+galaxy0" profile="23.0"> + <description>Detect Transcription Associated Proteins (TAPs)</description> + <edam_topics> + <edam_topic>topic_0121</edam_topic> + </edam_topics> + <requirements> + <requirement type="package" version="3.3.2">hmmer</requirement> + <requirement type="package" version="5.26">perl</requirement> + <requirement type="package" version="4.8">sed</requirement> + </requirements> + <required_files> + <include type="literal" path="tapscan_script_v74.pl"/> + <include type="literal" path="tapscan_domains_v12.txt"/> + <include type="literal" path="tapscan_rules_v81.txt"/> + <include type="literal" path="tapscan_coverage_values_v10.txt"/> + </required_files> + <command detect_errors="aggressive"><![CDATA[ + +hmmsearch + --domtblout domtblout.txt + --cut_ga + '${__tool_directory__}/tapscan_domains_v12.txt.gz' + '$protein_fasta_in' + +&& + +perl '${__tool_directory__}/tapscan_script_v74.pl' + domtblout.txt + '${__tool_directory__}/tapscan_rules_v81.txt' + '$taps_detected' + '$taps_family_counts' + '$taps_detected_extra' + '${__tool_directory__}/tapscan_coverage_values_v10.txt' + +&& + +## make the outputs tab-separated for Galaxy compatibility +sed -i -e 's/;/\t/' -e 's/;/\t/' -e 's/;/\t/' -e "1d" '$taps_detected' && +sed -i -e 's/;/\t/g' -e "1d" '$taps_family_counts' && +sed -i -e 's/;/\t/4' -e 's/;/\t/' -e 's/;/\t/' -e 's/;/\t/' -e "1d" '$taps_detected_extra' && + +## add header lines for clarity +sed -i '1s/^/sequence ID\tTAP family\tnumber of classifications\tdomains\n/' '$taps_detected' && +sed -i '1s/^/TAP family\tnumber of detected proteins\n/' '$taps_family_counts' && +sed -i '1s/^/sequence ID\tTAP family\tsubfamily\tnumber of classifications\tdomains\n/' '$taps_detected_extra' + + ]]></command> + <inputs> + <param name="protein_fasta_in" type="data" format="fasta" optional="false" label="Proteins in FASTA format" help=""/> + <param name="domtblout" type="boolean" checked="false" label="Output the HMMer domain hits table?"/> + </inputs> + <outputs> + <data name="taps_detected" format="tabular" label="${tool.name} on ${on_string}: Detected TAPs - domains and assigned TAP family +for each gene ID"> + <actions> + <action name="column_names" type="metadata" default="sequence ID,TAP family,number of classifications,domains" /> + </actions> + </data> + <data name="taps_family_counts" format="tabular" label="${tool.name} on ${on_string}: Count - Summary of the number of +members for each TAP family"> + <actions> + <action name="column_names" type="metadata" default="TAP family,number of detected proteins" /> + </actions> + </data> + <data name="taps_detected_extra" format="tabular" label="${tool.name} on ${on_string}: Detected TAPs Extra - with subfamiliy information"> + <actions> + <action name="column_names" type="metadata" default="sequence ID,TAP family,subfamily,number of classifications,domains" /> + </actions> + </data> + <data name="domtbl" format="tabular" from_work_dir="domtblout.txt" label="${tool.name} on ${on_string}: HMMer Domain Hits Table"> + <filter>domtblout</filter> + </data> + </outputs> + <tests> + <test expect_num_outputs="3"> + <param name="protein_fasta_in" value="PUBLIC_Ectocarpus-sp7_proteins_head.fa" ftype="fasta"/> + <output name="taps_detected" file="output.1.tsv" ftype="tabular" lines_diff="2" /> + <output name="taps_family_counts" file="output.2.tsv" ftype="tabular" lines_diff="2" /> + <output name="taps_detected_extra" file="output.3.tsv" ftype="tabular" lines_diff="2" /> + </test> + <test expect_num_outputs="4"><!-- test with domtblout --> + <param name="protein_fasta_in" value="PUBLIC_Ectocarpus-sp7_proteins_head.fa" ftype="fasta"/> + <param name="domtblout" value="true"/> + <output name="taps_detected" file="output.1.tsv" ftype="tabular" /> + <output name="taps_family_counts" file="output.2.tsv" ftype="tabular" /> + <output name="taps_detected_extra" file="output.3.tsv" ftype="tabular" /> + <output name="domtbl" file="output.domtbl.tsv" ftype="tabular" lines_diff="10"/> + </test> + </tests> + <help><![CDATA[ +**What it does** + +TAPscan is a comprehensive tool for annotating TAPs with a special focus on species +belonging to the Archaeplastida. In general, the detection of TAPs is based on the detection +of highly conserved protein domains. + +During the first step, each sequence out of a species protein set is scanned for protein domains +(stored as profile Hidden Markov Models) using hmmsearch. The domains list consists of 154 profile +HMMs and functions as the domain reference during the hmmsearch command. + +Afterwards, by running TAPscan, specialized rules are applied to finally +assign the protein sequences to TAP families based on the detected domains in the previous step. +With the latest TAPscan v4, a protein set can be scanned for 137 different TAP families with high +accuracy through applying GA-thresholds and coverage values. + +**Output Files** + +TAPscan provides the user with three different output files. Each output file is +tab-separated. + +- **Output 1: "Detected TAPs"** - contains the detected domains and finally assigned TAP family + for each gene ID. If domains are assigned to a sequence but not all rules are fulfilled, the + sequence is assigned to “0_no_family_found”. +- **Output 2: "Family Counts"** is a summary of the number of members for each TAP family. +- **Output 3: "Detected TAPs Extra"** - is similar to output 1 but contains additional + information about subfamilies. + + ]]></help> + <creator> + <organization name="Rensing Lab" url="https://plantco.de"/> + </creator> + <citations> + <!-- TODO: add citation for TAPscan v4 paper when published --> + <citation type="doi">10.3390/genes12071055</citation> + </citations> +</tool>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tapscan_coverage_values_v10.txt Wed Feb 14 13:54:16 2024 +0000 @@ -0,0 +1,154 @@ +Acetyltransf_1 0.0931034483 +AP2 0.3214285714 +ARID 0.0516393443 +AUX_IAA 0.1077981651 +Auxin_resp 0.4308510638 +B3 0.196875 +BES1_N 0.3888888889 +BSD 0.485915493 +BTB 0.3105095541 +bZIP_1 0.64453125 +bZIP_2 0.5948275862 +C1_2 0.1612903226 +CAF1C_H4-bd 0.1764705882 +CBFB_NFYA 0.2019230769 +CCT 0.4952830189 +CG-1 0.5568181818 +CSD 0.5878378378 +DDT 0.2678571429 +DEAD 0.1115591398 +dsrm 0.2330097087 +DUF260 0.3638059701 +DUF296 0.155075188 +DUF547 0.1181672026 +DUF573 0.3515625 +DUF632 0.3302603037 +DUF702 0.2314126394 +E2F_TDP 0.2078313253 +EIN3 0.5874125874 +FHA 0.1777456647 +FLO_LFY 0.4569138277 +FYRC 0.3928571429 +FYRN 0.46875 +GAGA_bind 0.2265774379 +GATA 0.5406976744 +GRAS 0.3990825688 +Helicase_C 0.118852459 +HLH 0.3191489362 +HMG_box 0.6866197183 +Homeobox 0.5485074627 +HSF_DNA-bind 0.071641791 +IQ 0.6428571429 +JmjC 0.5058139535 +JmjN 0.4261363636 +K-box 0.438 +KNOX1 0.578125 +KNOX2 0.6346153846 +LIM 0.4726027397 +MBF1 0.3049450549 +Med26 0.1939655172 +Med31 0.451048951 +Med6 0.1577868852 +Med7 0.1818181818 +MEKHLA 0.4357541899 +mTERF 0.4850543478 +Myb_DNA-binding 0.3636363636 +NAM 0.0142857143 +O-FucT 0.0914866582 +Ovate 0.3137755102 +PAH 0.1194267516 +PAZ 0.1564569536 +PC4 0.3848684211 +PHD 0.37 +Piwi 0.4082278481 +PLATZ 0.30625 +PP2C 0.4110962567 +QLQ 0.61875 +RB_B 0.1663987138 +Rcd1 0.4131355932 +Response_reg 0.5017241379 +RFX_DNA_binding 0.5257731959 +RHD_DNA_bind 0.4581447964 +Ribonuclease_3 0.0935013263 +RRN3 0.2342427093 +Runt 0.5714285714 +RWP-RK 0.4542253521 +S1FA 0.7386363636 +SBP 0.4274193548 +SET 0.0392857143 +SH2 0.4197247706 +Sigma70_r2 0.1675531915 +Sigma70_r3 0.6346153846 +Sigma70_r4 0.6388888889 +SIR2 0.45703125 +SNF2_N 0.1150895141 +SRF-TF 0.406779661 +SSXT 0.5856164384 +START 0.5067567568 +STAT_bind 0.3781869688 +SWIB 0.3267326733 +SWIRM 0.2532467532 +TANGO2 0.125 +TCP 0.219665272 +TCR 0.4943181818 +TEA 0.4078282828 +TF_AP-2 0.5660377358 +Tfb2 0.1757668712 +tify 0.5955882353 +Tub 0.0872576177 +VEFS-Box 0.4918831169 +WD40 0.0563909774 +WHIM1 0.5263157895 +Whirly 0.5648148148 +WRC 0.6223404255 +WRKY 0.2196969697 +WSD 0.1768867925 +YABBY 0.2804621849 +zf-AN1 0.4027777778 +zf-B_box 0.2746478873 +zf-C2H2 0.5080645161 +zf-C5HC2 0.253125 +zf-CCCH 0.5689655172 +zf-Dof 0.5955882353 +ZF-HD_dimer 0.5294117647 +zf-MIZ 0.6805555556 +zf-TAZ 0.1566455696 +zf-ZPR1 0.1608910891 +Zn_clus 0.5480769231 +Alfin-like 0.75 +BEL 0.75 +DNC 0.75 +FIE_clipped_for_HMM 0.75 +G2-like_Domain 0.75 +HRT 0.75 +KNOXC 0.75 +LUFS_Domain 0.75 +NF-YB 0.75 +NF-YC 0.75 +NOZZLE 0.75 +PINTOX 0.75 +STER_AP 0.75 +trihelix 0.75 +ULT_Domain 0.75 +VARL 0.75 +VOZ_Domain 0.75 +WOX_HD 0.75 +CXC 0.75 +bZIP_AUREO 0.75 +bZIP_CDD 0.50 +ALOG 0.75 +C2H2-IDD 0.75 +zf-MYST 0.75 +CBP 0.75 +DUF3591 0.75 +LOB2 0.75 +zz-ADA2 0.75 +NLP 0.75 +CRF 0.75 +GIY_YIG 0.75 +ZPR 0.75 +LD 0.75 +NDX 0.75 +SAWADEE 0.75 +C1HDZ 0.75 +C2HDZ 0.75
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tapscan_rules_v81.txt Wed Feb 14 13:54:16 2024 +0000 @@ -0,0 +1,298 @@ +ABI3/VP1;AP2;should not +ABI3/VP1;Auxin_resp;should not +ABI3/VP1;B3;should +ABI3/VP1;WRKY;should not +Alfin-like;Alfin-like;should +Alfin-like;Homeobox;should not +Alfin-like;zf-TAZ;should not +Alfin-like;PHD;should not +AP2;AP2;should +AP2;CRF;should not +ARF;Auxin_resp;should +Argonaute;Piwi;should +Argonaute;PAZ;should +ARID;ARID;should +Aux/IAA;AUX_IAA;should +Aux/IAA;Auxin_resp;should not +Aux/IAA;B3;should not +BBR/BPC;GAGA_bind;should +BES1;BES1_N;should +bHLH;HLH;should +bHLH;TCP;should not +bHLH_TCP;TCP;should +bHSH;TF_AP-2;should +BSD domain containing;BSD;should +bZIP1;bZIP_1;should +bZIP1;HLH;should not +bZIP1;Homeobox;should not +bZIP2;bZIP_2;should +bZIP2;HLH;should not +bZIP2;Homeobox;should not +bZIPAUREO;bZIP_AUREO;should +bZIPAUREO;HLH;should not +bZIPAUREO;Homeobox;should not +bZIPCDD;bZIP_CDD;should +bZIPCDD;HLH;should not +bZIPCDD;Homeobox;should not +C2C2_CO-like;CCT;should +C2C2_CO-like;GATA;should not +C2C2_CO-like;tify;should not +C2C2_CO-like;PLATZ;should not +C2C2_CO-like;zf-B_box;should +C2C2_Dof;zf-Dof;should +C2C2_Dof;GATA;should not +C2C2_GATA;GATA;should +C2C2_GATA;tify;should not +C2C2_GATA;zf-Dof;should not +C2C2_YABBY;YABBY;should +C2H2;zf-C2H2;should +C2H2;zf-MIZ;should not +C3H;AP2;should not +C3H;SRF-TF;should not +C3H;MYB-2R;should not +C3H;MYB-3R;should not +C3H;MYB-4R;should not +C3H;zf-C2H2;should not +C3H;zf-CCCH;should +CAMTA;CG-1;should +CAMTA;IQ;should +NF-YA;bZIP_1;should not +NF-YA;bZIP_2;should not +NF-YA;CBFB_NFYA;should +NF-YB;NF-YB;should +NF-YB;NF-YC;should not +NF-YC;NF-YB;should not +NF-YC;NF-YC;should +NF-YC;HMG_box;should not +Coactivator p15;PC4;should +CPP;TCR;should +CSD;CSD;should +CudA;STAT_bind;should +CudA;SH2;should +DBP;DNC;should +DBP;PP2C;should +DDT;DDT;should +DDT;Homeobox;should not +DDT;Alfin-like;should not +Dicer;Piwi;should not +Dicer;DEAD;should +Dicer;Helicase_C;should +Dicer;Ribonuclease_3;should +Dicer;dsrm;should +DUF246 domain containing/O-FucT;O-FucT;should +DUF296 domain containing;DUF296;should +DUF547 domain containing;DUF547;should +DUF632 domain containing;DUF632;should +DUF833 domain containing/TANGO2;TANGO2;should +E2F/DP;E2F_TDP;should +EIL;EIN3;should +FHA;FHA;should +GARP_ARR-B_G2;CCT;should not +GARP_ARR-B_G2;G2-like_Domain;should +GARP_ARR-B_G2;Response_reg;should +GARP_ARR-B_Myb;CCT;should not +GARP_ARR-B_Myb;Response_reg;should +GARP_ARR-B_Myb;Myb_DNA-binding;should +GARP_G2-like;G2-like_Domain;should +GARP_G2-like;Response_reg;should not +GARP_G2-like;Myb_DNA-binding;should not +GeBP;DUF573;should +GIF;SSXT;should +GNAT;Acetyltransf_1;should +GNAT;PHD;should not +GRAS;GRAS;should +GRF;QLQ;should +GRF;WRC;should +C3HDZ;Homeobox;should +C3HDZ;START;should +C3HDZ;MEKHLA;should +C4HDZ;Homeobox;should +C4HDZ;START;should +C4HDZ;MEKHLA;should not +HD_PLINC;ZF-HD_dimer;should +HD_WOX;WOX_HD;should +HD_DDT;Homeobox;should +HD_DDT;DDT;should +HD_DDT;WHIM1;should +HD_DDT;WSD;should +HD_PHD;PHD;should +HD_PHD;Homeobox;should +HD_PINTOX;Homeobox;should +HD_PINTOX;PINTOX;should +HD_BEL;Homeobox;should +HD_BEL;BEL;should +HD_KNOX1;Homeobox;should +HD_KNOX1;KNOX1;should +HD_KNOX1;KNOX2;should +HD_KNOX1;KNOXC;should not +HD_KNOX2;Homeobox;should +HD_KNOX2;KNOX1;should +HD_KNOX2;KNOX2;should +HD_KNOX2;KNOXC;should +HD-other;EIN3;should not +HD-other;Homeobox;should +HD-other;bZIP_1;should not +HD-other;WOX_HD;should not +HD-other;PINTOX;should not +HD-other;PHD;should not +HD-other;BEL;should not +HMG;ARID;should not +HMG;HMG_box;should +HMG;YABBY;should not +HRT;HRT;should +HSF;HSF_DNA-bind;should +IWS1;Med26;should +Jumonji_PKDM7;JmjC;should +Jumonji_PKDM7;JmjN;should +Jumonji_PKDM7;zf-C5HC2;should +Jumonji_PKDM7;FYRN;should +Jumonji_PKDM7;FYRC;should +Jumonji_Other;JmjC;should +LFY;FLO_LFY;should +LIM;two_or_more_LIM;should +LUG;LUFS_Domain;should +MADS;SRF-TF;should +MADS;K-box;should not +MADS_MIKC;SRF-TF;should +MADS_MIKC;K-box;should +MBF1;MBF1;should +Med6;Med6;should +Med7;Med7;should +mTERF;mTERF;should +MYB-2R;G2-like_Domain;should not +MYB-2R;Response_reg;should not +MYB-2R;trihelix;should not +MYB-2R;MYB-2R;should +MYB-3R;G2-like_Domain;should not +MYB-3R;Response_reg;should not +MYB-3R;trihelix;should not +MYB-3R;MYB-3R;should +MYB-4R;G2-like_Domain;should not +MYB-4R;Response_reg;should not +MYB-4R;trihelix;should not +MYB-4R;MYB-4R;should +MYB-related;ARID;should not +MYB-related;G2-like_Domain;should not +MYB-related;Myb_DNA-binding;should +MYB-related;Response_reg;should not +MYB-related;trihelix;should not +MYB-related;MYB-2R;should not +MYB-related;MYB-3R;should not +MYB-related;MYB-4R;should not +NAC;NAM;should +NZZ;NOZZLE;should +OFP;Ovate;should +PcG_EZ;CXC;should +PcG_EZ;SET;should +PcG_FIE;FIE_clipped_for_HMM;should +PcG_FIE;WD40;should +PcG_VEFS;VEFS-Box;should +PcG_VEFS;zf-C2H2;should not +PcG_MSI;WD40;should +PcG_MSI;CAF1C_H4-bd;should +PcG_MSI;FIE_clipped_for_HMM;should not +PHD;Myb_DNA-binding;should not +PHD;Alfin-like;should not +PHD;ARID;should not +PHD;DDT;should not +PHD;Homeobox;should not +PHD;JmjC;should not +PHD;JmjN;should not +PHD;PHD;should +PHD;SWIB;should not +PHD;zf-TAZ;should not +PHD;zf-MIZ;should not +PHD;zf-CCCH;should not +PHD;HMG_box;should not +PLATZ;PLATZ;should +Pseudo ARR-B;CCT;should +Pseudo ARR-B;Response_reg;should +Pseudo ARR-B;tify;should not +RB;RB_B;should +Rcd1-like;Rcd1;should +Rel;RHD_DNA_bind;should +RF-X;RFX_DNA_binding;should +RRN3;RRN3;should +Runt;Runt;should +S1Fa-like;S1FA;should +SAP;STER_AP;should +SBP;SBP;should +SET;zf-C2H2;should not +SET;TCR;should not +SET;CXC;should not +SET;PHD;should not +SET;Myb_DNA-binding;should not +SET;SET;should +Sigma70-like;Sigma70_r2;should +Sigma70-like;Sigma70_r3;should +Sigma70-like;Sigma70_r4;should +Sin3;PAH;should +Sin3;WRKY;should not +Sir2;SIR2;should +SOH1;Med31;should +SRS;DUF702;should +SWI/SNF_BAF60b;SWIB;should +SWI/SNF_SNF2;AP2;should not +SWI/SNF_SNF2;PHD;should not +SWI/SNF_SNF2;SNF2_N;should +SWI/SNF_SNF2;zf-CCCH;should not +SWI/SNF_SNF2;Myb_DNA-binding;should not +SWI/SNF_SNF2;HMG_box;should not +SWI/SNF_SWI3;SWIRM;should +SWI/SNF_SWI3;Myb_DNA-binding;should +TEA;TEA;should +TFb2;Tfb2;should +tify;tify;should +TRAF;BTB;should +TRAF;zf-TAZ;should not +Trihelix;trihelix;should +TUB;Tub;should +ULT;ULT_Domain;should +VARL;VARL;should +VOZ;VOZ_Domain;should +Whirly;Whirly;should +WRKY;WRKY;should +Zinc finger, AN1 and A20 type;zf-AN1;should +Zinc finger, AN1 and A20 type;zf-C2H2;should not +Zinc finger, MIZ type;zf-MIZ;should +Zinc finger, MIZ type;zf-C2H2;should not +Zinc finger, ZPR1;zf-ZPR1;should +Zn_clus;Zn_clus;should +ALOG;ALOG;should +C2H2;C2H2-IDD;should not +C2H2_IDD;C2H2-IDD;should +C2H2_IDD;zf-C2H2;should +MYST;zf-MYST;should +CBP;CBP;should +CBP;zf-TAZ;should +CBP;BTB;should not +TAFII250;DUF3591;should +LOB1;bZIP_1;should not +LOB1;bZIP_2;should not +LOB1;DUF260;should +LOB1;HLH;should not +LOB1;Homeobox;should not +LOB2;LOB2;should +LDL/FLD;SWIRM;should +LDL/FLD;Myb_DNA-binding;should not +ADA2;zz-ADA2;should +ADA2;Myb_DNA-binding;should +RKD;RWP-RK;should +RKD;NLP;should not +NLP;RWP-RK;should +NLP;NLP;should +CRF;CRF;should +CRF;AP2;should +GIY_YIG;GIY_YIG;should +ZPR;ZPR;should +HD-LD;LD;should +HD-NDX;NDX;should +HD-SAWADEE;SAWADEE;should +C1HDZ;C1HDZ;should +C1HDZ;Homeobox;should +C1HDZ;START;should not +C1HDZ;MEKHLA;should not +C2HDZ;C2HDZ;should +C2HDZ;Homeobox;should +C2HDZ;START;should not +C2HDZ;MEKHLA;should not
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tapscan_script_v74.pl Wed Feb 14 13:54:16 2024 +0000 @@ -0,0 +1,916 @@ +#!/usr/bin/perl +use strict; +use warnings; + +# Written by Gerrit Timmerhaus (gerrit.timmerhaus@biologie.uni-freiburg.de). +# Changes included by Kristian Ullrich, Per Wilhelmsson and Romy Petroll. + +# Script to extract all detected domains out of a hmmsearch results file and classify the families of all used proteins based on these domains. +# The classification depends on a table which contains all known classification rules for the protein families of interest and on specific coverage values defined for every domain. +# The script provides three outputs, namely output.1, output.2 and output.3. The output files are tables in ";"-delimited format. +# The structure of output.1 is: "sequence ID ; TAP family ; number of classifications ; domains". +# Output.3 shares in principle the same structure as output.1, except that subfamilies are considered. ("sequence ID ; TAP family ; Subfamily ; number of classifications ; domains") +# The superior TAP family is specified first, followed by the subfamily. If a TAP family has no subfamily, the TAP family is specified first and then a "-". +# The structure of output.2 is: "TAP family";"number of detected proteins". +# More than one entry for a protein is possible because the classification rules may allow more than one classification. +# +# The script must be startet with the arguments <hmmsearch output file> <classification rules> <output classifications file> <output family statistics file> <output subfamily classifications file> <"filter" if desired> + +if (!@ARGV or ($ARGV [0] eq "-h") or ($ARGV [0] eq "-help")) { + print "Usage: extract.and.classify.pl <hmmsearch output file> <classification rules> <output classifications file> <output family statistics file> <output subfamily classifications file> <\"filter\" (if desired)>\n\n"; + exit; +} + +# hmmsearch_output: domtblout file +my $hmmsearch_output = $ARGV [0]; +# decision_table: rules file +my $decision_table = $ARGV [1]; +# family_classifications: output.1 +my $family_classifications = $ARGV [2]; +# family_statistics: output.2 +my $family_statistics = $ARGV [3]; +# subfamily_classifications: output.3 +my $subfamily_classifications = $ARGV [4]; +# domspec_cuts: coverage values file +my $domspec_cuts = $ARGV [5]; +# gene_model_filte: filter for ARATH and ORYSA +my $gene_model_filter = $ARGV [6]; + +if ($family_statistics eq "") { + print "Usage: extract.and.classify.pl <hmmsearch output file> <classification rules> <output classifications file> <output family statistics file> <output subfamil classifications file> <\"filter\" (if desired)>\n\n"; + exit; +} + +if ($gene_model_filter and $gene_model_filter eq "filter") { + print "\nGene model filter is activated. It only works for TAIR (Arabidopsis) and TIGR (Rice) proteins up to now\n"; +} + +# Array where the $hmmsearch-output/domtblout file will be stored +my @output = (); +# Array with domain-specific coverage values +my @cuts = (); +# Array with rules +my @dec_table = (); +# Counter for the number of detected domains in the hmmsearch output file +my $entry_counter = 0; +# Containes the actual result for a query sequence +my $akt_entry = ""; +# Used to define query entry to ignore similar domains +my $whole_entry = ""; +# Includes the final entries after ignoring similar domains +my @results_of_extraction = (); +# Used to define query entry to ignore similar domains +my $extracted_domain = ""; +# Used to define query entry to ignore similar domains +my $present = ""; +# Used to define query entry to ignore similar domains +my $protein = ""; + +my $lek = ""; + +############################################ +### 1. Read in the hmmsearch output file ### +############################################ + +print "\n*** reading in $hmmsearch_output ***\n\n"; + +@output = get_file_data("$hmmsearch_output"); + +print "*** Parsing $hmmsearch_output ***\n\n"; + +# If wrong format exit the program, ninth row from the end +if ($output [-9] !~ /^# Program: hmmsearch.*/) { + print "wrong file format. $hmmsearch_output has to be a hmmsearch output file\n\n"; + exit; +} + +### 1.1 Trim input file (hmmsearch) to fit script. Erase lines starting with #. +@output = grep !/^#.*/, @output; + +# Read domain-specific coverage values file +# domname cut-off +# EIN3 0.5874125874 + +open(FILENAME,$domspec_cuts); +my %cuts = map { chomp; split /\t/ } <FILENAME>; + +### 1.2 Use first (prot name), third (domain name), eight (dom evalue), fourteenth (# overlapping) and fifteenth (# domain) column of data input(array element). +foreach my $output (@output) { + $output =~ /^(\S+)\s+\S+\s+\S+\s+(\S+)\s+\S+\s+(\S+)\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+(\S+)\s+\S+\s+\S+\s+\S+\s+(\S+)\s+(\S+)\s+.*/; + $lek = (($6-$5)+1)/$3; + $output = $1."\t".$2."\t".$4."\t".$lek; + } + +# Stucture: +# ARATHwo_AT2G03430.1 Ank 1.8e-08 0.93 +# ARATHwo_AT2G03430.1 Ank 7.8e-10 0.95 +# ARATHwo_AT2G03430.1 Ank 1.2e-08 0.93 +# ARATHwo_AT2G03430.1 Ank 1.2e-08 0.63 + +################################ +### 2. Modify the input data ### +################################ + +### 2.1 Run through length_cut_off loop (throws out entries below coverage values) +my @cutarray; +foreach my $output (@output) { + $output =~ /^(\S+)\t+(\S+)\t(\S+)\t(\S+)/; + if ($4 > $cuts{$2}) { + push (@cutarray, $output); + } +} + +# End up with (prot name) (domain name) (dom evalue) (overlapping) + +# Structure: +# ARATHwo_AT2G03430.1 Ank 1.8e-08 0.93 +# ARATHwo_AT2G03430.1 Ank 7.8e-10 0.95 +# ARATHwo_AT2G03430.1 Ank 1.2e-08 0.93 + + +### 2.2 Retain hit with the lowest evalue + +# String for the previous protein name +my $old_prot = ""; +# Coordinates for array filling +my $x = -1; +my $y = 1; +my $scoreeval; +my @newarray; +foreach my $cutarray (@cutarray) { + $cutarray =~ /^(\S+)\t+(\S+)\t(\S+)\t(\S+)/; + $akt_entry = $1.$2; + # If the protein contains more than one of the same domain + if ($old_prot eq $akt_entry) { + if ($3>$scoreeval) { + $y++; + $newarray[$x] = $1."\t".$2."\t".$3."\t".$y; + } + else { + $y++; + $newarray[$x] = $1."\t".$2."\t".$scoreeval."\t".$y; + } + } + # If the protein is new reset $j and push the entry in the next array + else { + $y = 1; + $x++; + $newarray[$x] = $1."\t".$2."\t".$3."\t".$y; + } + $old_prot = $akt_entry; + $scoreeval = $3 + +} +# Final structure: +# ARATHwo_AT2G03430.1 Ank 7.8e-10 3 + +### 2.3 Then sort @output primarily on prot name($1) and then secondarily on eval($3) to fit the "similar"-procedure. +@newarray = sort { (split '\t', $a)[0] cmp (split '\t', $b)[0] || (split '\t', $a)[2] <=> (split '\t', $b)[2] } @newarray; + +# Flags for merged domains +my $ARR_B_counter = 0; +my $bZIP_counter = 0; +my $ET_counter = 0; + +# Flags for similar domain omission +my $WD40domain = 0; # modified for FIE rule +my $FIEdomain = 0; # --------'''''-------- +my $MYBdomain = 0; +my $G2domain = 0; +my $YBdomain = 0; +my $YCdomain = 0; +my $PHDdomain = 0; +my $Alfindomain = 0; +my $Dr1domain = 0; +my $GATAdomain = 0; +my $Dofdomain = 0; +my $C1domain = 0; + +foreach my $line (@newarray) { + +# Reset the flags for domain omission + if ($line !~ /^$protein.*$/ ) { + $WD40domain = 0; + $FIEdomain = 0; + $MYBdomain = 0; + $G2domain = 0; + $YBdomain = 0; + $YCdomain = 0; + $PHDdomain = 0; + $Alfindomain = 0; + $Dr1domain = 0; + $GATAdomain = 0; + $Dofdomain = 0; + $C1domain = 0; + + } + + # Get the Query entry + $line =~ /^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/; + $protein = "$1"; + $extracted_domain = $2; + $present = "$4"; # FIX! number for many Myb + $whole_entry = $1.";".$2.";".$3.";".$4; + + + # Ignore FIE if it is not better scored than WD40 + if ($extracted_domain eq "WD40" and $FIEdomain == 0) {$WD40domain = 1;} + + # Ignore similar domains part 1 + + if ($extracted_domain eq "Myb_DNA-binding" and $G2domain == 0) {$MYBdomain = 1;} + if ($extracted_domain eq "G2-like_Domain" and $MYBdomain == 0) {$G2domain = 1;} + + if ($extracted_domain eq "PHD" and $Alfindomain == 0 and $C1domain == 0) {$PHDdomain = 1;} + if ($extracted_domain eq "Alfin-like" and $PHDdomain == 0 and $C1domain == 0) {$Alfindomain = 1;} + if ($extracted_domain eq "C1_2" and $Alfindomain == 0 and $PHDdomain == 0) {$C1domain = 1;} + + if ($extracted_domain eq "GATA" and $Dofdomain == 0) {$GATAdomain = 1;} + if ($extracted_domain eq "zf-Dof" and $GATAdomain == 0) {$Dofdomain = 1;} + + # Ignore similar domains part 2 + + if ($extracted_domain eq "FIE_clipped_for_HMM" and $WD40domain == 1) {next;} + if ($extracted_domain eq "Myb_DNA-binding" and $G2domain == 1) {next;} + if ($extracted_domain eq "G2-like_Domain" and $MYBdomain == 1) {next;} + + if ($extracted_domain eq "PHD" and ($Alfindomain == 1 or $C1domain == 1)) {next;} + if ($extracted_domain eq "Alfin-like" and ($PHDdomain == 1 or $C1domain ==1)) {next;} + if ($extracted_domain eq "C1_2" and ($PHDdomain == 1 or $Alfindomain == 1)) {next;} + + if ($extracted_domain eq "GATA" and $Dofdomain == 1) {next;} + if ($extracted_domain eq "zf-Dof" and $GATAdomain == 1) {next;} + + # Save the entry + push @results_of_extraction, $whole_entry; + $entry_counter++; +} +print "$entry_counter domain matches were found in $hmmsearch_output\n\n"; + +# Sort the entries: +my @sorted_results_of_extraction = @results_of_extraction; +print "*** Preparing hmmsearch results for classification ***\n\n"; + +# This array will be filled with the sorted proteins +my $array_of_arrays = []; + +# String for the previous protein name +my $old_entry = ""; + +# Coordinates for array filling +my $i = -1; +my $j = 0; + +@dec_table = get_file_data("$decision_table"); + +if ($dec_table [0] !~ /^[^;]+;[^;]+;[^;]/) { + print "wrong file format. $decision_table has to be in the format family;domain;type\n\n"; + exit; +} + +# Formate the entries +foreach my $domain_entry (@sorted_results_of_extraction) { + + $domain_entry =~ /^([^;]+);/; + $akt_entry = $1; + # If the protein has more than one domain push it behind the old entry + if ($old_entry eq $akt_entry) { + $j++; + $array_of_arrays->[$i][$j] = $domain_entry; + } + + # If the protein is new reset $j and push the entry in the next array + else { + $j = 0; + $i++; + $array_of_arrays->[$i][$j] = $domain_entry; + } + $old_entry = $akt_entry; + +} +$old_entry = ""; + +# Remember the number of entries to use them later +my $number_of_proteins = $i+1; +print "$number_of_proteins proteins were found in $hmmsearch_output\n"; +$number_of_proteins--; + +######################################### +### 3. Get the classification entries ### +######################################### + +# Make a list of all families in the classification rules file +my @liste_alle_familien = ('0_no_family_found'); + +my $ARR_B_in_list = 0; +my $bZIP_in_list = 0; +my $ET_in_list = 0; + +my $array_of_classifications = []; +$i = -1; +$j = 0; + +my @classifications_input = get_file_data("$decision_table"); + +# Sort the classifications +my @classifications = sort @classifications_input; + + +foreach my $classification (@classifications) { + $classification =~ /^([^;]+);/; + $akt_entry = $1; + + # If the family has more than one domain entry push it behind the old entry + if ($old_entry eq $akt_entry) { + + $j++; + $array_of_classifications->[$i][$j] = $classification; + } + + # If the family is new push it in the next array and reset $j + else { + $j = 0; + $i++; + $array_of_classifications->[$i][$j] = $classification; + # Add family to list of all families in the classification rules + push(@liste_alle_familien,$akt_entry); + + # Add hardcoded "OR" defined families to list of families if subfamily is present + # Do this just once for each family + if (($akt_entry eq "GARP_ARR-B_Myb") or ($akt_entry eq "GARP_ARR-B_G2")) { + if ($ARR_B_in_list == 0) { + push(@liste_alle_familien,"GARP_ARR-B"); + $ARR_B_in_list++; + }} + if (($akt_entry eq "bZIP1") or ($akt_entry eq "bZIP2") or ($akt_entry eq "bZIPAUREO") or ($akt_entry eq "bZIPCDD")) { + if ($bZIP_in_list == 0) { + push(@liste_alle_familien,"bZIP"); + $bZIP_in_list++; + }} + if (($akt_entry eq "HRT") or ($akt_entry eq "GIY_YIG")) { + if ($ET_in_list == 0) { + push(@liste_alle_familien,"ET"); + $ET_in_list++; + }} + } + $old_entry = $akt_entry; +} + +my $number_of_classifications = $i+1; +print "$number_of_classifications different families were found in $decision_table\n\n"; +$number_of_classifications--; + +print "*** begin classification ***\n\n"; + +# Create the output files (output.1 and output.3) +my $outputfile = "$family_classifications"; +my $subfamilyoutput = "$subfamily_classifications"; + +unless (open(FAMILY_CLASSIFICATIONS, ">$outputfile")) { + print "Cannot open file \"$outputfile\" to write to!!\n\n"; + exit; +} + +unless (open(SUBFAMILY_CLASSIFICATIONS, ">$subfamilyoutput")) { + print "Cannot open file \"$subfamilyoutput\" to write to!!\n\n"; + exit; +} + +print FAMILY_CLASSIFICATIONS "family classifications for $hmmsearch_output\n"; +print SUBFAMILY_CLASSIFICATIONS "family classifications for $hmmsearch_output\n"; + +# Counter for classified families +my $classified_families = 0; +# Counter for unclassified families +my $unclassified_families = 0; +# Counter for the different amount of entries in classification possibilities +my @entry_counter = []; +# Counter for the possible classifications for the current protein +my $possibilities = 0; +# For later famliy statistics +my @family_list = []; +# This array will be filled with the result. Later written in output.1 and output.3 +my @family_classifications_file = []; +my @subfamily_classifications_file = []; + +# One time for every protein in array of arrays +for (my $ii = 0; $ii <= $number_of_proteins; $ii++) { + my $jj = 0; + $possibilities = 0; + + # Flag to mark that any family was found for the current protein + my $member_found = 0; + + # In this string all the domains of one protein will be stored + # The ; signs are important to mark a single entry (for example to differ AP2 and TF_AP2) + my $domains = ";"; + + # Get the domains in all elements of the current protein array: + while ($array_of_arrays->[$ii][$jj]) { + + $array_of_arrays->[$ii][$jj] =~ /([^;]+);[^;]+;(\d+)$/; + # For discrimination between MYB and MYB-related. If more than 1 MYB domains was found replaced "Myb_DNA-binding" with "two_or_more_Myb_DNA-binding" + # Same for LIM + if ($1 eq "Myb_DNA-binding" and $2 eq 2) { + $domains .= "MYB-2R;Myb_DNA-binding;"; + } + elsif ($1 eq "Myb_DNA-binding" and $2 eq 3) { + $domains .= "MYB-3R;Myb_DNA-binding;"; + } + elsif ($1 eq "Myb_DNA-binding" and $2 eq 4) { + $domains .= "MYB-4R;Myb_DNA-binding;"; + } + elsif ($1 eq "LIM" and $2 > 1) { + $domains .= "two_or_more_LIM;LIM;"; + } + else { + $domains .= "$1;"; + } + $jj++; + } + +######################### +### 4. Classification ### +######################### + +# Get the name of the actual protein for the output after classification: +$array_of_arrays->[$ii][0] =~ /^([^;]+);/; +$akt_entry = $1; + +# Variables for double classification decisions: + +# Here the shoulds for the actual family will be stored +my $shoulds_act_family = ";"; +# Here the shoulds of the previous CLASSIFIED family will be stored +my $shoulds_prev_family = ""; + +# This loop will be made for every family entry in output.1 and output.3 +for ($i = 0;$i <= $number_of_classifications; $i++) { + $j = 0; + + # Flag to mark if the protein is a possible member of the current family + my $possible_member = 0; + + # Reset the domain entries for the current family + $shoulds_act_family = ";"; + + # This loop will be made for every domain classification entry for the current family + while ($array_of_classifications->[$i][$j]) { + + # For "should" entries + if ($array_of_classifications->[$i][$j] =~ /;should$/) { + + # Get the domain from the classification entry + $array_of_classifications->[$i][$j] =~ /^[^;]+;([^;]+);[^;]+/; + + my $domain_classification_entry = $1; + # Check if the protein might be a member of the current family. If yes check the next entry + if ($domains =~ /;$domain_classification_entry;/) { + $possible_member = 1; + $j++; + # All matched domains for the current family are stored here: + $shoulds_act_family .= "$domain_classification_entry;"; + next; + } + $possible_member = 0; + $j++; + last; + } + + # For "should not" entries + if ($array_of_classifications->[$i][$j] =~ /;should not$/) { + + # Get the domain from the classification entry + $array_of_classifications->[$i][$j] =~ /^[^;]+;([^;]+);[^;]+/; + + # Check if the protein has the domain. If yes go to the next family + my $domain_check = $1; + if ($domains =~ /;$domain_check;/) { + $possible_member = 0; + last; + } + # If not check the next entry + else { + $j++; + next; + } + } + + # This happens when there is no "should" or "should not" entry at the right position + print "error in classification entry $array_of_classifications->[$i][$j]\n" + } + + # If the check was successful print the found classification + if ($possible_member) { + + $array_of_classifications->[$i][0] =~ /^([^;]+);/; + my $currentFamily = $1; + $possibilities++; + # The double classified proteins solution: + if ($possibilities > 1) { + + # Fill an array with the current domains in $domains + my @domains_array = []; + my $number_of_domains = ($domains =~ tr/;/;/)-1; + my $tempdomains = $domains; + for (my $domain_counter = 0;$domain_counter != $number_of_domains;$domain_counter++) { + + $tempdomains =~ /^;([^;]+);/; + $domains_array[$domain_counter] = $1; + # Remove the inserted domain from domains + $tempdomains =~ s/^;[^;]+;/;/; + } + # Compare the two possible families (actual and previous family) + my $array_counter = 0; + while ($array_counter < $number_of_domains) { + if ($shoulds_prev_family =~ /$domains_array[$array_counter]/) { + if ($shoulds_act_family =~ /$domains_array[$array_counter]/) { + + # If actual domain is in previous and actual family go to next domain + $array_counter++; + next; + + } + # Protein was right classified in the previous classification. The actual entry will be ignored + + $possibilities--; + last; + } + + # If actual domain is in the actual family but not in the previous. The actual classification is right + if ($shoulds_act_family =~ /$domains_array[$array_counter]/) { + + pop @family_classifications_file; + pop @subfamily_classifications_file; + + # Merge "GARBP_ARR-B_Myb" and "GARP_ARR-B_G2" to "GARP_ARR-B" + if ( ($currentFamily eq "GARP_ARR-B_Myb") or ($currentFamily eq "GARP_ARR-B_G2")){ + + push @family_classifications_file, "$akt_entry;GARP_ARR-B;$possibilities$domains\n"; + push @subfamily_classifications_file, "$akt_entry;GARP_ARR-B;-;$possibilities$domains\n"; + if ($ARR_B_counter == 0) { + push @liste_alle_familien, 'GARP_ARR-B'; + $ARR_B_counter++; + } + } + elsif ( ($currentFamily eq "bZIP1") or ($currentFamily eq "bZIP2") or ($currentFamily eq "bZIPAUREO") or ($currentFamily eq "bZIPCDD")) { + + push @family_classifications_file, "$akt_entry;bZIP;$possibilities$domains\n"; + push @subfamily_classifications_file, "$akt_entry;bZIP;-;$possibilities$domains\n"; + if ($bZIP_counter == 0) { + push @liste_alle_familien, 'bZIP'; + $bZIP_counter++; + } + } + elsif ( ($currentFamily eq "HRT") or ($currentFamily eq "GIY_YIG")) { + push @subfamily_classifications_file, "$akt_entry;ET;-;$possibilities$domains\n"; + push @family_classifications_file, "$akt_entry;ET;$possibilities$domains\n"; + if ($ET_counter == 0) { + push @liste_alle_familien, 'ET'; + $ET_counter++; + } + } + else { + + push @family_classifications_file, "$akt_entry;$currentFamily;$possibilities$domains\n"; + push @subfamily_classifications_file, "$akt_entry;$currentFamily;-;$possibilities$domains\n"; + } + $possibilities--; + last; + + } + + $array_counter++; + } + + } + # Normal enty: if the family is classified for one family write it in the array + else { + + # Store the matched domains of the actual family for respectively later doubly classification decision + $shoulds_prev_family = $shoulds_act_family; + # Store the entry in the output array + # Merge "GARBP_ARR-B_Myb" and "GARP_ARR-B_G2" to "GARP_ARR-B" + # Add GARP_ARR-B to @liste_alle_familien ONCE + + if ( ($currentFamily eq "GARP_ARR-B_Myb") or ($currentFamily eq "GARP_ARR-B_G2")){ + push @family_classifications_file, "$akt_entry;GARP_ARR-B;$possibilities$domains\n"; + push @subfamily_classifications_file, "$akt_entry;GARP_ARR-B;-;$possibilities$domains\n"; + if ($ARR_B_counter == 0) { + push @liste_alle_familien, 'GARP_ARR-B'; + $ARR_B_counter++; + } + } + elsif (($currentFamily eq "bZIP1") or ($currentFamily eq "bZIP2") or ($currentFamily eq "bZIPAUREO") or ($currentFamily eq "bZIPCDD")){ + push @family_classifications_file, "$akt_entry;bZIP;$possibilities$domains\n"; + push @subfamily_classifications_file, "$akt_entry;bZIP;-;$possibilities$domains\n"; + if ($bZIP_counter == 0) { + push @liste_alle_familien, 'bZIP'; + $bZIP_counter++; + } + } + elsif (($currentFamily eq "HRT") or ($currentFamily eq "GIY_YIG")){ + push @family_classifications_file, "$akt_entry;ET;$possibilities$domains\n"; + push @subfamily_classifications_file, "$akt_entry;ET;-;$possibilities$domains\n"; + if ($ET_counter == 0) { + push @liste_alle_familien, 'ET'; + $ET_counter++; + } + } + else { + + push @family_classifications_file, "$akt_entry;$currentFamily;$possibilities$domains\n"; + push @subfamily_classifications_file, "$akt_entry;$currentFamily;-;$possibilities$domains\n"; + } + + $classified_families++; + } + + # Flag to mark that any family was found for the current protein + $member_found = 1; + } + + } + + if ($possibilities == 0) { + + # If no family was found for the current protein give this out + push @family_classifications_file, "$akt_entry;0_no_family_found;0$domains\n"; + push @subfamily_classifications_file, "$akt_entry;0_no_family_found;-;0$domains\n"; + $unclassified_families++; + } + + # Increment the number of possible members in the array at the right position + else { + + my $temp = $entry_counter[$possibilities]; + $temp++; + $entry_counter[$possibilities] = $temp; + } + +} +# Define for which TAP families also subfamilies may be present: + +foreach my $subfamily_classifications_file (@subfamily_classifications_file) { + + # If "C2H2" was assigned to a sequence, write "C2H2;C2H2" to output.3 as TAP family and subfamily, respectively. + if ($subfamily_classifications_file =~ /C2H2/ ) { + $subfamily_classifications_file =~ s/C2H2;-/C2H2;C2H2/ + } + # If "C2H2_IDD" was assigned to a sequence, write "C2H2;C2H2_IDD" to output.3 as TAP family and subfamily, respectively. + if ($subfamily_classifications_file =~ /C2H2_IDD/ ) { + $subfamily_classifications_file =~ s/C2H2_IDD;-/C2H2;C2H2_IDD/ + } + if ($subfamily_classifications_file =~ /bHLH/ ) { + $subfamily_classifications_file =~ s/bHLH;-/bHLH;bHLH/ + } + if ($subfamily_classifications_file =~ /bHLH_TCP/ ) { + $subfamily_classifications_file =~ s/bHLH_TCP;-/bHLH;bHLH_TCP/ + } + if ($subfamily_classifications_file =~ /NF-YA/ ) { + $subfamily_classifications_file =~ s/NF-YA;-/NFY;NF-YA/ + } + if ($subfamily_classifications_file =~ /NF-YB/ ) { + $subfamily_classifications_file =~ s/NF-YB;-/NFY;NF-YB/ + } + if ($subfamily_classifications_file =~ /NF-YC/ ) { + $subfamily_classifications_file =~ s/NF-YC;-/NFY;NF-YC/ + } + if ($subfamily_classifications_file =~ /C1HDZ/ ) { + $subfamily_classifications_file =~ s/C1HDZ;-/HDZ;C1HDZ/ + } + if ($subfamily_classifications_file =~ /C2HDZ/ ) { + $subfamily_classifications_file =~ s/C2HDZ;-/HDZ;C2HDZ/ + } + if ($subfamily_classifications_file =~ /C3HDZ/ ) { + $subfamily_classifications_file =~ s/C3HDZ;-/HDZ;C3HDZ/ + } + if ($subfamily_classifications_file =~ /C4HDZ/ ) { + $subfamily_classifications_file =~ s/C4HDZ;-/HDZ;C4HDZ/ + } + if ($subfamily_classifications_file =~ /MYST/ ) { + $subfamily_classifications_file =~ s/MYST;-/HAT;MYST/ + } + if ($subfamily_classifications_file =~ /CBP/ ) { + $subfamily_classifications_file =~ s/CBP;-/HAT;CBP/ + } + if ($subfamily_classifications_file =~ /TAFII250/ ) { + $subfamily_classifications_file =~ s/TAFII250;-/HAT;TAFII250/ + } + if ($subfamily_classifications_file =~ /GNAT/ ) { + $subfamily_classifications_file =~ s/GNAT;-/HAT;GNAT/ + } + if ($subfamily_classifications_file =~ /LOB1/ ) { + $subfamily_classifications_file =~ s/LOB1;-/LBD;LOB1/ + } + if ($subfamily_classifications_file =~ /LOB2/ ) { + $subfamily_classifications_file =~ s/LOB2;-/LBD;LOB2/ + } + if ($subfamily_classifications_file =~ /MYB-related/ ) { + $subfamily_classifications_file =~ s/MYB-related;-/MYB;MYB-related/ + } + if ($subfamily_classifications_file =~ /SWI\/SNF_SWI3/ ) { + $subfamily_classifications_file =~ s/SWI\/SNF_SWI3;-/MYB-related;SWI\/SNF_SWI3/ + } + if ($subfamily_classifications_file =~ /MYB-2R/ ) { + $subfamily_classifications_file =~ s/MYB-2R;-/MYB;MYB-2R/ + } + if ($subfamily_classifications_file =~ /MYB-3R/ ) { + $subfamily_classifications_file =~ s/MYB-3R;-/MYB;MYB-3R/ + } + if ($subfamily_classifications_file =~ /MYB-4R/ ) { + $subfamily_classifications_file =~ s/MYB-4R;-/MYB;MYB-4R/ + } + if ($subfamily_classifications_file =~ /RKD/ ) { + $subfamily_classifications_file =~ s/RKD;-/RWP-RK;RKD/ + } + if ($subfamily_classifications_file =~ /NLP/ ) { + $subfamily_classifications_file =~ s/NLP;-/RWP-RK;NLP/ + } + if ($subfamily_classifications_file =~ /AP2/ ) { + $subfamily_classifications_file =~ s/AP2;-/AP2;AP2/ + } + if ($subfamily_classifications_file =~ /CRF/ ) { + $subfamily_classifications_file =~ s/CRF;-/AP2;CRF/ + } +} + +### 4.1 Filter for gene models + +# Filter for gene models. All alternative splice variants will be removed from Arabidopsis and rice entries +shift @family_classifications_file; +shift @subfamily_classifications_file; +# Sort the array for filter and a sorted output +@family_classifications_file = sort @family_classifications_file; +@subfamily_classifications_file = sort @subfamily_classifications_file; +if ($gene_model_filter and $gene_model_filter eq "filter") { + print "*** filtering gene models: removing splice variants ***\n"; + + # temporary array for the filtered entries + my @filtered_entries = []; + my $models_removed_counter = 0; + + my $prev_entry = ""; + foreach my $entry_line (@family_classifications_file) { + if ($entry_line !~ /^([^.]+).\d+/) { + print "Bad format for filtering splice variants. Use \"filter\" only for TAIR (Aradopsis) or TIGR (Rice) files.\n\n"; + exit; + } + if ($1 eq $prev_entry) { + $models_removed_counter++; + next; + } + $prev_entry = $1; + push @filtered_entries, $entry_line; + } + print " -> $models_removed_counter gene models were removed\n\n"; + @family_classifications_file = @filtered_entries; + shift @family_classifications_file; +} + +# Print the results in the array to output.1 and output.3 and push the names of the TAP families and Subfamilies into $family_list to create output.2 +foreach my $fcf_line (@family_classifications_file) { + $fcf_line =~ /^[^;]+;([^;]+)/; + #push @family_list, "$1"; + print FAMILY_CLASSIFICATIONS "$fcf_line"; +} +close (FAMILY_CLASSIFICATIONS); + +foreach my $fcf_line (@subfamily_classifications_file) { + $fcf_line =~ /^[^;]+;([^;]+);([^;]+)/; + if ($2 eq "-") { + push @family_list, "$1"; + } + else { + push @family_list, "$2"; + } + print SUBFAMILY_CLASSIFICATIONS "$fcf_line"; +} + +close (SUBFAMILY_CLASSIFICATIONS); + +print "*** calculating the family statistics and write it in $family_statistics ***\n\n"; + +################################## +### 5. Create the output files ### +################################## + +my $statistics_outputfile = "$family_statistics"; + +unless (open(FAMILY_STATISTICS, ">$statistics_outputfile")) { + print "Cannot open file \"$statistics_outputfile\" to write to!!\n\n"; + exit; +} + +# Count the family entries +my @output_family_statistics = (); +my @gefundene_familien = (); +my $family_counter = 1; + +shift @family_list; +@family_list = sort @family_list; + + +my $old_family = ""; +push @family_list, 'BAD FIX'; # Makes to loop go through every fam and stops at non fam(BAD FIX). + +foreach my $line (@family_list) { + if ($line eq $old_family) { + $family_counter++; + } + elsif ($old_family ne "") { + push (@output_family_statistics,"$old_family;$family_counter\n"); + # Add all found families to a list of found families + push (@gefundene_familien,"$old_family"); + $family_counter=1; + } + $old_family = $line; +} + +my %hash = (); + +# Put all families from the classifictaion ruled and all found families in a hash +foreach my $element (@gefundene_familien,@liste_alle_familien) {$hash{$element}++;} + +# Remove merged families +delete $hash{'GARP_ARR-B_Myb'}; +delete $hash{'GARP_ARR-B_G2'}; +delete $hash{'bZIP1'}; +delete $hash{'bZIP2'}; +delete $hash{'bZIPAUREO'}; +delete $hash{'bZIPCDD'}; +delete $hash{'HRT'}; +delete $hash{'GIY_YIG'}; + +# Add all not found families from the classification rules to @output_family_statistics +# With zero as number of families found + +foreach my $element (keys %hash) { + if (($hash{$element} == 1) and ( $element eq "0_no_family_found")) { + push (@output_family_statistics,"$element;$unclassified_families\n"); + } + if (($hash{$element} == 1) and ($element ne "0_no_family_found")) { + push (@output_family_statistics,"$element;0\n"); + } +} + +# Sort @output_family_statistics caseinsensitive-alphabetically +my @sortierte_statistik = sort {lc $a cmp lc $b} @output_family_statistics; + +# Print headline to @sortierte_statistik +unshift (@sortierte_statistik,"family statistics for $hmmsearch_output\n"); + +print FAMILY_STATISTICS @sortierte_statistik; + +# Print FAMILY_STATISTICS "$old_family;$family_counter\n"; + +close (FAMILY_STATISTICS); + +################################################# +### 6. Give out some statistical informations ### +################################################# + +$entry_counter [0] = 0; +my $sum = 0; +foreach my $entry (@entry_counter) { + $sum += $entry; +} +print "$classified_families classifications were found for $sum proteins.\n"; +print "This classifications are divided in:\n"; +my $count = 0; +foreach my $element (@entry_counter) { + if ($count != 0) { + print "$element proteins were classified for $count"; + if ($count == 1) {print " family\n";} + else {print " different families\n";} + } + $count++; +} +print "\n$unclassified_families proteins could not be classified\n\n"; + +print "*** The results were written in $family_classifications and $subfamily_classifications ***\n"; +print "*** done ***\n\n"; + +exit; + +sub get_file_data { + + my ($filename) = @_; + + use strict; + use warnings; + + my @filedata = (); + + unless( open(GET_FILE_DATA, $filename)) { + print STDERR "Cannot open file \"$filename\"n\n"; + exit; + } + + @filedata = <GET_FILE_DATA>; + + close GET_FILE_DATA; + + return @filedata; +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/PUBLIC_Ectocarpus-sp7_proteins_head.fa Wed Feb 14 13:54:16 2024 +0000 @@ -0,0 +1,32 @@ +>Ec-00_001160.1 Forkhead-associated (FHA) domain (809) ;mRNA; f:1452084-1459465 +MEPPPPVPAPIIVAGTRAKETGVDGNSSAATAGSTAAVSPPLDKAQQSALDPAKDGSASLPPPPPKTAGSLNGDGVKAVASGGYKPPSWGLTEAPGASGLSLTVLKGGVEVGSISLDNRTHVLLGRQQGVVDVLLEHPSISRKHAILQHGQNGALFLFDNGSTHGCSVNKKKIPPKEFHRLHVGDVIKFGESTRLYALEGPEELRPAEYESDNLRNLRLDAGRKQLAAKLAKIKAGGAGEGGGKGGGDSGEYGISWGFDEDAVAEEEDEDGDGAERDEDEVELPDYLKTEAQKRRRRDTKIGLTEDNVHKRDAKLFEKLQLKLTKIEEIEETIRSKNKARERGKEGGEGGSGGEEGGRKAGRGTEDGEEDDDYYDRTAPVVPTSSGTSKSDLASKKAEIKARRFGARDKTKKLSAVTPPADDTAAAERKRGVGPGQNEAAAQSLEALTRRGEAVVEDLERTQAGLAELEAEEAGEAALAEDGGVAADPLDMFMTENRRKERQQAIVRLTAKREALREEQALLKVMVEAARPSMPTLKKSPAPAAATASVAATKEETVPVPETTTRGSGSSSSDQAAEPDDRKDTRAAAVDREHMPGGGGYGEAMPGSTGSGSHEKYGDEVEKTAPSRAVLAPEAASTLGSMPSPVAPPCRSNAIPEARKSPAGTVASAGTRERGVEKGQAETRHPGVKEGKEASGTKKRGTPVGTSMLPPPPSKRQQRRAENSKAGLAGENDDDPVEPKAKRTVKGPAMPPPLGKPSKVGGGVSVPTAVARVGEKVAGKEALEGGDVDWVPPKDALEKMAALNRKFGY* +>Ec-00_001310.1 SET domain protein (668) ;mRNA; r:1563326-1571582 +MAIPTSKDEDLLDDEQAPAVAAAQDQELVAGSDAGTVAPSKKKKKKKKKKKSPQQNNQLAQVQVYETIKDLDTFKVTEDSVSGRCVIASRDLKAGELVLREPPFVKVVRRDCASRQCAYCCQQVTERGKIEADVPFAVYCSRACQAREDALRAAEASALGKLAGISAARDVDIDLLRMLLRLLITRAKALGLREPSGDSDSVSRGVDEEGEDGTMGEGLFLRQQWENLYALMHHREAMAPDWISVVREAGEDLLQLLPEWVRFDVEEVVQLACRVNVNAHGLRDDSGANLVIGVGMFPLTAMINHACRPNCTFVYFGGNLEVRTLEPVSAGAELSVYYIDLLQSTAARRQELLTSKHFLCKCSRCENPSSMDDYLDGVCCTDCGERGCLTPTPPPSAEDILAAQLAQLGEGLADESAANGSGKGMGKKKGGGGGSTTSRRETSVNPSAALGAKDGSGNGSRAGGVRGGSESVVQKVYCSACGREYPGTAVEESVARAKALWDAAMAVVRAKSFSLARKSLEKWLQDYDAGAVLPPTATKKKSVKKDRLKLHPANVMVVQTLVPLSNCCTFEEDHAASARHLRRAVSAMEAVYPANFPELGDFHAALADANDALLQKRGQTLPKKSRSQAVSERKQALERAATIRSVCLGKDHPATREAARALDRVTG* +>Ec-00_001360.1 aureochrome 2 (442) ;mRNA; r:1593684-1598236 +MPASVKPPVFTSMVHRKVQHHTSWQDADFQPDDLGLDLTDLSTMTGFLMNEVPDNTGHFYPPWANELSPLVKDEPSAFMMPDPAAPRQPQPRQQQQQQDQRLPAPEGLPAAPVADPALDVIMGGATGSSRPGSTTSSSSSGASSMLRAPKAAAAAGAAALGGVGSTFRKTPAGGVTRRRSSSKEEQAKKRRERNRVLARRTRLRKKFFFQSLQQQVARLQRENERLKGIVTTRCPDSVGEILMSCRSKMPSMVADCAGQATAVLDQSGFLLVKALQSSQPSFCVTDPQMPDNPIVYASDTFIELTGYDRAQVLGRNCRFLQGPDTDPDAVAKIRKGIEEGSDTSVYLRQYKADGTVFWNHVFVAALRNSEHKIINYVGIQHPLDKEPSPEVVACINNGKEQEIMSVQEEDRPAGWGGQWPEDVNGDLATLDHLMAGGWGTD* +>Ec-00_001730.1 WD40 repeat (1089) ;mRNA; r:1948051-1960039 +MSGYSRAGVGVGGGGGGGGGGGGGGGGGGGGANSNRGASASRGPGGALQGAHMAGTVATVAAAGGQQSKSVAVFRSLELCDLLKLEIGNITSEMGQHLEEREEYEKKFRQQLAEMDRIQHSLKQLQEAHMVMKQQYEDEIVRLRHQLESSHPLKSDPDSRGGGAGSSVQGVSGGMSMGSTGPSQSHSSGPPHKGLGGMPVGGPHGLGSPRKQPGQLEPGAASLRGPMLTAPGAQLVGGGGMGAGSGVVLPGMAMRGRGHGEDDYGGGRGQGPNGQTLEPLSKRPRLADLQGPPGPLPPHVLHPPHGFSQSQHQQHPQQHQQHPPPHHKGGFFGGRPGAPPAAVAGGGGGGGGGGDNGGRRPGGPEGQYRWPGGSGPGGGGGGGDSGGAGGGGGAGVPAMGPGKQRQLGPGGGGAPPRELSSSTGKGGGAGGGGGGNGNGMVEIPDAIPAELSYQVRYEAEEGEGGRAAAAKDGLAVELAKSQDLRSVVCCVRFSTDGTKIAAGSHSCVKVFDVNSFKQLYVCRKQVQEEQGAPQTADGGDPYVRAVCFSPDGLSIVAGMEKNSAKVLVLEEEGGRQGAITLSGHESEVYSLDWVSDMIASGSGDGRIRLWDSVTGACKASLGDMGGPQDGVTSVVLRQDTTMVAAASIDRVVHVWSTQTHKILHRLDGHSESVYAITFSADGNRLVSGGLDKTIKVWDLGPGSEGRLSPQAKTLPGGHKDYVLSVCFSQDGKYIISGSKDRSVTMWDARLMKRVATITGFKNSVIGVSASPFNSMFATGSGDNLVCVWNYGDRDDYRRQSESAVAPASSGRSSSAEKPRPPSRSSRSASPPISNASSLRKDDRASSPSPPRASPGRGGRGGDGDGGSSRGRGGVGLVEKGRGGSAGAGAGATNGKGRTSPSSDEREGRTAAGSEERKRSGSKESSRTGPRGGGGGHDSDRKQQRHESKHRQGRAGSPSDGRRSSSNSKERSSGRGGGVEPMDEDDDTEEEKQGEEAEGGGGKRAGNTDETPLGRKRGSGGVGNGSGGRKALNRSSSSSSSSSGSGGGGGGGGGGGGGGGRGPSPEKRGKAALPPKKELQRRDSPSSAE* +>Ec-00_010160.1 Phytochrome-like protein (978) ;mRNA; f:17223525-17226527 +MDPHTHTNERIHMRSSGGCDGDMRTASTHIQSCGCAFAIEETADDMYPSGLRILGVSQNAVEAPWAYASSVSDLLGKDLGHLLRVECVRTVRSLVTRYAQACKPSHEDDDHISPKANRITADACPSPRIRGELRPGAASGAEGDIASFTVTGSNPGVYLVDVERHGSDCARVEHTPGLLLLGDLLESIPVGSNPVESTAALCDALAKSMPAYDRVMVYRFAPDGSGQDDGSGEVVHESVRAGADIGSSYLNLRFPALDIPPIARKLFKLVGVRFIADTSAPAVPMITLHDQASSPLDLFRSALRAPAECHLRYLRNMGVKASLVVSIAVDGGTWGLFSFHSYTRTVHPSCEERLSVEMAASVVSSLISRYQREEIAATALSLSRTLGNLGNYTRVNDFLSADHHSLLGILDVDAVILCEHLRSVTLYGKKDITLSLEECQELRNGDGDESSEMAISFRTLGARGVAFFWVRSFFVAFLRGSIANSVKWAGNPDAPVNKDEVMTPRASFELFMRTSGARCKAWSPLTVDLLNMVRQGFSSQLYAEALPADLQETFARVSHELRTPFHGVMGALEILEAGNGIMGAEEQLDVIRSALRCGGSMMSTLNDILEIAKDRNNTEVVRGRFSASGPIVLAVAAMGLFAAAESVELTVEIGPPDDVLEVTGDMRRIKAIVQNLVNNAIKFTPSGGKVRISLVVFDSLQEVTDWWAKETGRFGAQTWMASSGGESAPGTGSSQAIKWHVYCVEDSGIGVLPADLPHLVEAYRQISHGASRSHAGTGLGLHICRTHMEAMCGSFGIASTFSEKDTSGGTLFAVVLPLDSEEPGAAVNTQEPLEAEVNLRLLDHKIRRFFKDNGADVEVMSATDGFIALEMHEAARRNQSHGSVLAGMFIDFHMPDLDGIECTKRIRLLEADNGWSRIMICGCTADPTQAIRRVFQNAGGDEVISKPWCPGQVESICNAMVANVLNAEQKSGGDGGA* +>Ec-00_001700.1 NIN-like transcription factor (579) ;mRNA; r:1923852-1928158 +MHTPLLNSHHRDTGLLETLEKPDKEPSTSRQQDTVMSLSTHSGTRGRPPANRASCGNSTIPDITVRSPADGLPPRLAIPHEPPKVPRRTPSKGNKRETLADIAKRIPVGLMRHYFNYPLRAAAEAMDISVTTLKRLCRRHGVKRWPHRQICGINRTLNDLETQHDTAKGDEVDSVADQLRQLYRRRDVIIELAFESDDESISNGSDDAPPAGRKLSKRGSFTSSDGGGSSASSSSFPSPPSSPSPSRSSSFVSPPASPTPTDERTHTAAGVTWLNNGAPGTGLPSLAPVLSVTVSSGGGGGGGGSSSSRSSKCPAVRSRGSSRGAKISSGGVGSSGSSGSYGKTSSGSMRPHRPSGTSGSGRSKGPRKPRSSAMFGSIPGLGKVPPPVVTVATGAAVSTTLSLPERTSASTSTSTSPVRADASTETSSRVTIPVPSRPLSASIPANSSSTHDGGGTSTVARLSLIGSGASWISDNDAPSPSTTSVDILGLGPHGSQKMDDLAILGDLLFGPDDAAVAAAAAAGVRAQSSAATYPPPSSTTSPPSSSYERGFSAGLASASNWGGGLCWDANGLSHLGPL* +>Ec-01_005970.1 Acetyltransferase (GNAT) domain protein (608) ;mRNA; f:5180258-5197307 +MERSVSLAKRRNLVIGWRKMARKKEIQVVLLAALISTLGIGPVAARIVVTDHLAFVASTVRTRTSSSSSPSTFQLQRDVRKTAAVPPRRYEQQQQTSRLRPRCGWGLERPSLSPDPVPDAFSAPLRRRRRRPRQQQQQHLVVAASSGLQEPLERVASIPVQEAAAGRGDRVSYGRGGTVVEAAAPEGVDAADGGGHERKTAGSVYGDEVGVLRGAVIWKGEENDADKDDGGGGGEDDDFEGDDIDIYLPGGMGAGLRPGAKPRRKRPKPPVMWSKPVRGSKRLAVVLAGREDLDEAGALCIKVFFGQPDSPWKAAQLRQLLHEQRQDLESRCSRRESVMFKAIDTRRKDGMVGFVEVSETSGSKYGMGAGITLADTRPVVSNLAVDPRVRRCGVGSALMEACEDLVKTWSFDEIILQVEEANEAALAFYGGKGFKKLFVDKAARRYDTSGFLLQNVRTSKLTMRKALGSSTKRSKSGDSLADHVSQLFGFLSKPFVVRPPPSKRLPARSTASVETLFGRPGAVGSGSGVRRPRSGGSGRRVTSSGGRVGSSSGGIGRSSGRSEAAAGGHDTSFSSSSSSSSSSSSSSSSAGEISTSRTRLPRTIRRR* +>Ec-01_004960.2 Ankyrin repeat-containing domain (797) ;mRNA; f:4270310-4278760 +MPAEGRRANPIELNIYIEVVLYSSTTRLAAASFFFCFSFFSSKTTVSGEPTPRGGDFADPPPIFMIARSTASPSLIDITKLSSAMMLGNMSSSVLSQLDRLKESFLWAAAKGGRVEECESLLEMGTDINWVSPEGDTPLLAACRNGHLQTALCLLSHGASANQVDKDGRTALHVSCRYGKEAVAEALILRGADVSARDHGGATAFESQGPHVPDGMLQRLDTIAQRSGRRTHHHLGISTAAINTSTFTTSSGRSAQDGGGSMSSRRSNTVLDSDTLSARATGGGVPENNIGDGRSGWRWRSNTGRIEHHVPLTDDAHDGAAGVGPAAISTGDGGRDDAQREERGGVEGRTTFPSISRKAGSTSADSRPSSRVHSAGRAASSSGDGVRSSDDEHDSAAIAAAIASASAPAPATTVTAAGSTIYPMMASNTLASPAPGPTSLRSPRRPLHFHGTPTASWDGAGADGGAGHGITVSNSRDSGSGGNRWNGSGSASGSSSSSSSSSSSNSGRGGGGERQSRPAASATNANSPATATGTTATTTTVTPTCGLYGSLSTNAVAERINSRSITAHWLSPPAAAEVRGPLGDHAMHWGGRTNGDLVSGDAPYESIAPAGAGGRGVLGGGGHGGDPAQGDGGSSDHVGLIRALWLQEKESRLASEAKADAVRDQSARLWNELVRSEKQVLSLEEGAAALREERDKLKATLNGEGFKGRSLQELEHLEKDLRKALEGVCGERDRIVQQQLAKEEQRLCVVCQENERSVLLLPCRHLCVCRGCSERQELTLCPLCRDHITESLVVYS* +>Ec-01_005360.1 Ferrochelatase-2, putative chloroplast precursor (583) ;mRNA; f:4601493-4607037 +MRREQKMRAAATLLCTLSVASAWFVAPPTSAASSHRHFDSTTSRASSPPFSSTAQRRRRNAAGGDAADASTTSGNIRGRRRAAAARTSHRMVASSRNWEWGRAKSSGDAPTPAAQAFGSDQELKLGVLLLNLGGPERPEDVQPFLFNLFADPDIIRLPKLVQWLQNPIAAVLAARRAPQSKSAYESIGGGSPIVSWTNAQAKGIASQLEAKGLSGTKCYVGMRYWHPFTEAALEAVEDDEINALVILPLYPQFSISTSGSSLRILNEEFTRRPEQWGHKNVVHTVVPSYHDRPGYVNAMASLIAREVAEYTPEQRMQGVQVLFSAHGVPKSYIDAGDPYKAQIESCVKLISEKVDGINAEGGPGAKPGSSGAAAGGVTYHLSYQSRVGPVEWLQPYTDAKIHELADNGCKNLVVVPVSFVSEHIETLEEIDMEYREVAEEAGITNWRRVPALNTDPAFIEDMADMVVEALALPTLTVSEAFTRNNCDRKEAEGFLEKALDGMYGMPKTGGKPPKSGKVGGAGAAGANASSGGGGGADGEGSGDKRKEAARVLSTLSGAAFAADGVGREIAGLFTATSDGIFF* +>Ec-01_005370.1 Hypothetical protein (68) ;mRNA; r:4610968-4611171 +MAHGVLLSSTTGWWRNLQVWCPCCCIFQFEPVGFYLHAKRGPSRLQTISLVGQRIMIFADPKQLESA* +>Ec-01_005380.1 Aminoalcohol phosphotransferase (396) ;mRNA; r:4612890-4621264 +MSDFRGGSVVTPRAVKYLRRYQYHGSDRSLLYKYVLSPLAETCLVFLPSWMAPNLVTTIGLGLTTASYLLLYLSMPGLVSNESTPWWVFPAAAAGLIVYQTLDNMDGKQARRTGSSSPLGLIFDHGCDAINCCFGVVFVSCILDAGSSLPLLAAIVLNQLVPFFFTTWEHYYTHELILPIVNGPSEGVVLGAVSACLRGVYGPEFFSAPREGLRGWPLGEVLMACSLLGVALTVFKQIVLVARARRLAGRGMVNPIRDASWFVVLMVLGGSWASVRPELFLTKPYTMVLLFGLLHVDMAVHLMVCHVCNMVCRSFRPILIPFMLVAANSFFPGGPLLGERTLVLGFTVLTFIYEALYLYLVVTETSLALDIYVFKLGKRSDATRNGGGTTTSKKD* +>Ec-01_005390.1 WD40 repeat (407) ;mRNA; f:4621750-4629304 +MSESKDGGGSSGGGGRAPYLDVSEDKMYDSRLRGDYELHDYAHSPSNQRLKEQRESKGGGSIADRVLGARLHPGLTISENSAEVFVTRFAPEGNLLAAACGDGTIRIFHVSTGRLAYNLQSSSSQSLPTTSLRFRPAIAQSKTRNVLVSCNAGGEIQHWHITSGKCLSTIKEEDQFYALDYRKDGSVFAATGKNHTVHIYDETTKHEISLLQGGSGYGSSSAPGHSNRVFAVKFHPEDPEVLLTAGWDNTVQFWDMRVGHSVRSIFGPHISGDSLDICGNEILTGSWRPNDPLEIWDYGTAELKETIPWNRSSAQGVQPTLLYTAQFSNTADGGRYIAAGGSGANEAKIFDHTANNQLVGTVTGLPRGVFTVDFSPSPDAKKVAVAGGDASIRIIDIVEEKTADVY* +>Ec-01_005400.1 hypothetical protein (1653) ;mRNA; r:4630582-4637601 +MSYVERLREELMGSLGFEVESQSCLSGNRGSAGERDQKARRRRSGGGAIAAVQVGVPYPHALRPRQIQQQQQQQQQQQGRRAADDSSCMVGGGCLRPQRADLSRVPRSRRRPASASSVRYLANKSNMNDGYSGANKDMDVLLKICRDQGRANSLNPADFDSSISAIANLPVKQFMTAAKDGWGPYFRNLHSNMRKETTARSTTTAKRMNRPPPERRRRSSQQQHPPLPLPRRASSGATKDEKKNNRRYSKVANDLHHMVRSADVASSDSNNRRRRRQSEDDNSDGLAASRARAAKRQAEEMVIRRMGVRLQALWQELKIPDPDRAYVTAAYLDAGGGGGGFSGQRARGGGGIEEPPVGSGGGGGGNSGPTSENVNRELTRQIRLLLEHRAATVKVLRCVNARESRLCEVEQALQAFQWHRGLDTDALGVVVSLAGLRDASLDVVRAVEEWRTNLWQPRAFCWRGVNYLEKMWQDTIFLRSPVGQSLLASVGLEAKDMTFVLYPSGNGGGAPSAIPGDSSTCGSELSDGERDTKGDVLRPPPAIVRLTPKAELVSAYRARYFEQSPVVGAGGRPGGESGDVGGERGRLKSTAAAATAAMEAVVVQEAALQRRVEAERVRLATKGCFVPLLRWLPGDSRNPAPKGKRRWSSSSPPSVPPAARNPPPGAESETHAAKDVVDSFAHNDGRSGVPAVRDVSVSAAIPPDPLTGGELPLQLQQQQQQQQQQQQPATVTNTSTSAGASLFRGSVRDSAQQERLTVSGEGDGHEEEDREDEDGDEGEDREQDEKGQASLLHTEGVRSQKQPERVEEGGHDQTQSQSEGPQAGQGSTAEVEGRSAFHENGVGEQTKMTNPLAPSFRLETSLHPPGAEEESRSETDIARRSACTVGAEARAGENGCLKVVATSECGVGSAGIPVGGVSSGDDGDGDTDKPSIVPGELRQEGIVDEERSVAPSVCYDDDFEEDAEGYSLSDSETSGEGGSADFGECLNGSISSDDAKDARRDQGVAHTTEEEGAAISCGEGRQNPVVGGNNVLTEHQRQQQLVEERETVAATAALRIQRSARAWLCRGGRLRNTKPDEKEAPQESAKEGKQEWLDAWRARRHSQVRQAQRPEEIPEEAAIRIQTTVRGGLASRQVEELRRELHARKMAATLKIQAFVRRRRARRNTTAINRREISENVDLRQQQEAEPDPELAGVGVCRGTARQGEEEILAVSSEFDSAEAATRSDRSARTIQKAVRRRLSSGNTTSKADGLPAMEIKGQPKTLEEEAQGQPDAGKRGDGPGAVLVNRCGSGDGSFIPSQQAPVVAAESSSPVVRAGDELDSPSSPAAVDGTPSSTPASGADGLDARLSDADGKNNRPDVAESAFVEAGLPSTSLPSEDSAESETADDAAGGDLSQTLQHPREGSNFQPEGASSWSPLPSPTTPRPEAAERGQQENDHQPRQVEGGGEAAVSLPPSSATACPPTLGPTVDVFVGLLPVDTDTSADAMMTTVGGTHAGGGAESLGFSAVGLSPVPERQALVAVAASASEYGSEDPDFDALSSSPGGSSRGGVSRGEEENAGVAARVATRSSVVTTGEKVEEPTESRGVERVAAPVAAAVAGAATEKNLAGDIEPVSLAAAEVATTKEVERGGTQCTEDGSDNSSIVSLSVSSGS* +>Ec-01_005410.1 Hypothetical protein (154) ;mRNA; f:4637945-4638913 +MGSAWSRKQATIHSSFQAAPLAVASWDLQHVKILHDRFRDDGYEFGIDRVSLRDLISSALPLARGVTGDLWEIYVEHEQEMLYPLELFAAVALQCHGLSRCGVSTIYSCPVFLCKNCKNPSYFHAHFGPCRSEGRRLDWCISSKASPGIRVHF* +>Ec-01_005410.2 Hypothetical protein (200) ;mRNA; f:4641160-4641759 +MATGDSKTEFSIPTPIPVNPCNGTCSLSSPVDASCKIVVTQHLYAVHAAIVLRGNSKQLKTRDLVRICARFDGKPVATLPPQSFHAHSSPAHCVVRLKKAGALHNRTAVPPSCRWPLATPLVYLFDQGSNHRHLRRQQHRSKRLLVCIAPTTIKPARPTTVVPSLRQPPPRLCPAPRPAPLVPATHHPRAIHQQRGRRC* +>Ec-01_005410.3 Hypothetical protein (102) ;mRNA; f:4639028-4639623 +MRGALLKLGVYRWLSVQRKRENSTKTRPQPTDSVCAVEVYYRVGVSFRAPRLLRSQPTEKRRGLCSTCLTLKADKRFRTTSWPSASRPSWEHFRRSLDPAV*
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/output.1.tsv Wed Feb 14 13:54:16 2024 +0000 @@ -0,0 +1,10 @@ +sequence ID TAP family number of classifications domains +Ec-00_001160.1 FHA 1 FHA; +Ec-00_001310.1 SET 1 SET; +Ec-00_001360.1 bZIP 2 bZIP_AUREO;bZIP_2;bZIP_CDD; +Ec-00_001700.1 RKD 1 RWP-RK; +Ec-00_001730.1 0_no_family_found 0 WD40; +Ec-00_010160.1 0_no_family_found 0 Response_reg; +Ec-01_004960.2 0_no_family_found 0 K-box; +Ec-01_005390.1 0_no_family_found 0 WD40; +Ec-01_005970.1 GNAT 1 Acetyltransf_1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/output.2.tsv Wed Feb 14 13:54:16 2024 +0000 @@ -0,0 +1,139 @@ +TAP family number of detected proteins +0_no_family_found 4 +ABI3/VP1 0 +ADA2 0 +Alfin-like 0 +ALOG 0 +AP2 0 +ARF 0 +Argonaute 0 +ARID 0 +Aux/IAA 0 +BBR/BPC 0 +BES1 0 +bHLH 0 +bHLH_TCP 0 +bHSH 0 +BSD domain containing 0 +bZIP 1 +C1HDZ 0 +C2C2_CO-like 0 +C2C2_Dof 0 +C2C2_GATA 0 +C2C2_YABBY 0 +C2H2 0 +C2H2_IDD 0 +C2HDZ 0 +C3H 0 +C3HDZ 0 +C4HDZ 0 +CAMTA 0 +CBP 0 +Coactivator p15 0 +CPP 0 +CRF 0 +CSD 0 +CudA 0 +DBP 0 +DDT 0 +Dicer 0 +DUF246 domain containing/O-FucT 0 +DUF296 domain containing 0 +DUF547 domain containing 0 +DUF632 domain containing 0 +DUF833 domain containing/TANGO2 0 +E2F/DP 0 +EIL 0 +ET 0 +FHA 1 +GARP_ARR-B 0 +GARP_G2-like 0 +GeBP 0 +GIF 0 +GNAT 1 +GRAS 0 +GRF 0 +HD-LD 0 +HD-NDX 0 +HD-other 0 +HD-SAWADEE 0 +HD_BEL 0 +HD_DDT 0 +HD_KNOX1 0 +HD_KNOX2 0 +HD_PHD 0 +HD_PINTOX 0 +HD_PLINC 0 +HD_WOX 0 +HMG 0 +HSF 0 +IWS1 0 +Jumonji_Other 0 +Jumonji_PKDM7 0 +LDL/FLD 0 +LFY 0 +LIM 0 +LOB1 0 +LOB2 0 +LUG 0 +MADS 0 +MADS_MIKC 0 +MBF1 0 +Med6 0 +Med7 0 +mTERF 0 +MYB-2R 0 +MYB-3R 0 +MYB-4R 0 +MYB-related 0 +MYST 0 +NAC 0 +NF-YA 0 +NF-YB 0 +NF-YC 0 +NLP 0 +NZZ 0 +OFP 0 +PcG_EZ 0 +PcG_FIE 0 +PcG_MSI 0 +PcG_VEFS 0 +PHD 0 +PLATZ 0 +Pseudo ARR-B 0 +RB 0 +Rcd1-like 0 +Rel 0 +RF-X 0 +RKD 1 +RRN3 0 +Runt 0 +S1Fa-like 0 +SAP 0 +SBP 0 +SET 1 +Sigma70-like 0 +Sin3 0 +Sir2 0 +SOH1 0 +SRS 0 +SWI/SNF_BAF60b 0 +SWI/SNF_SNF2 0 +SWI/SNF_SWI3 0 +TAFII250 0 +TEA 0 +TFb2 0 +tify 0 +TRAF 0 +Trihelix 0 +TUB 0 +ULT 0 +VARL 0 +VOZ 0 +Whirly 0 +WRKY 0 +Zinc finger, AN1 and A20 type 0 +Zinc finger, MIZ type 0 +Zinc finger, ZPR1 0 +Zn_clus 0 +ZPR 0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/output.3.tsv Wed Feb 14 13:54:16 2024 +0000 @@ -0,0 +1,10 @@ +sequence ID TAP family subfamily number of classifications domains +Ec-00_001160.1 FHA - 1 FHA; +Ec-00_001310.1 SET - 1 SET; +Ec-00_001360.1 bZIP - 2 bZIP_AUREO;bZIP_2;bZIP_CDD; +Ec-00_001700.1 RWP-RK RKD 1 RWP-RK; +Ec-00_001730.1 0_no_family_found - 0 WD40; +Ec-00_010160.1 0_no_family_found - 0 Response_reg; +Ec-01_004960.2 0_no_family_found - 0 K-box; +Ec-01_005390.1 0_no_family_found - 0 WD40; +Ec-01_005970.1 HAT GNAT 1 Acetyltransf_1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/output.domtbl.tsv Wed Feb 14 13:54:16 2024 +0000 @@ -0,0 +1,28 @@ +# --- full sequence --- -------------- this domain ------------- hmm coord ali coord env coord +# target name accession tlen query name accession qlen E-value score bias # of c-Evalue i-Evalue score bias from to from to from to acc description of target +#------------------- ---------- ----- -------------------- ---------- ----- --------- ------ ----- --- --- --------- --------- ------ ----- ----- ----- ----- ----- ----- ----- ---- --------------------- +Ec-01_005970.1 - 608 Acetyltransf_1 PF00583.26 117 1.6e-14 44.3 0.0 1 1 1.8e-15 2.8e-14 43.5 0.0 31 117 348 434 305 434 0.66 Acetyltransferase (GNAT) domain protein (608) ;mRNA; f:5180258-5197307 +Ec-00_001160.1 - 809 FHA PF00498.27 69 2.3e-19 59.7 0.2 1 1 2.4e-20 3.8e-19 59.0 0.2 2 69 123 190 122 190 0.96 Forkhead-associated (FHA) domain (809) ;mRNA; f:1452084-1459465 +Ec-01_004960.2 - 797 K-box PF01486.18 93 3.1e-06 17.5 4.8 1 1 3.7e-07 6e-06 16.6 4.8 11 85 683 754 674 756 0.81 Ankyrin repeat-containing domain (797) ;mRNA; f:4270310-4278760 +Ec-00_010160.1 - 978 Response_reg PF00072.25 112 1.2e-10 31.7 0.0 1 1 1.6e-11 2.6e-10 30.7 0.0 13 106 845 952 840 958 0.74 Phytochrome-like protein (978) ;mRNA; f:17223525-17226527 +Ec-00_001700.1 - 579 RWP-RK PF02042.16 49 2.1e-19 59.5 0.1 1 1 2.3e-20 3.7e-19 58.7 0.1 7 46 111 150 106 153 0.95 NIN-like transcription factor (579) ;mRNA; r:1923852-1928158 +Ec-00_001310.1 - 668 SET PF00856.29 169 4.1e-18 56.4 0.0 1 1 1.2e-18 2e-17 54.2 0.0 1 168 83 338 83 339 0.72 SET domain protein (668) ;mRNA; r:1563326-1571582 +Ec-00_001730.1 - 1089 WD40 PF00400.33 38 1.9e-38 120.1 18.0 1 4 3.9e-09 3.1e-08 24.5 0.2 5 38 579 611 575 611 0.86 WD40 repeat (1089) ;mRNA; r:1948051-1960039 +Ec-00_001730.1 - 1089 WD40 PF00400.33 38 1.9e-38 120.1 18.0 2 4 1e-11 8.1e-11 32.7 0.3 3 38 662 698 660 698 0.93 WD40 repeat (1089) ;mRNA; r:1948051-1960039 +Ec-00_001730.1 - 1089 WD40 PF00400.33 38 1.9e-38 120.1 18.0 3 4 9.6e-11 7.7e-10 29.6 0.1 8 38 716 747 709 747 0.88 WD40 repeat (1089) ;mRNA; r:1948051-1960039 +Ec-00_001730.1 - 1089 WD40 PF00400.33 38 1.9e-38 120.1 18.0 4 4 1.4e-05 0.00011 13.3 0.0 4 38 754 789 751 789 0.90 WD40 repeat (1089) ;mRNA; r:1948051-1960039 +Ec-01_005390.1 - 407 WD40 PF00400.33 38 3.8e-17 52.7 3.9 1 2 7.3e-06 5.8e-05 14.1 0.0 17 37 88 108 72 109 0.77 WD40 repeat (407) ;mRNA; f:4621750-4629304 +Ec-01_005390.1 - 407 WD40 PF00400.33 38 3.8e-17 52.7 3.9 2 2 1.8e-07 1.4e-06 19.2 0.1 8 38 223 255 217 255 0.89 WD40 repeat (407) ;mRNA; f:4621750-4629304 +Ec-00_001360.1 - 442 bZIP_2 - 55 9.2e-17 51.1 12.5 1 1 1e-17 1.6e-16 50.3 12.5 2 49 183 230 182 233 0.92 aureochrome 2 (442) ;mRNA; r:1593684-1598236 +Ec-00_001360.1 - 442 bZIP_CDD - 52 4.1e-13 39.4 7.8 1 1 4.4e-14 7.1e-13 38.6 7.8 2 43 188 229 187 232 0.94 aureochrome 2 (442) ;mRNA; r:1593684-1598236 +Ec-00_001360.1 - 442 bZIP_AUREO - 52 2.2e-22 69.4 6.2 1 1 2.7e-23 4.4e-22 68.5 6.2 1 51 187 237 187 238 0.97 aureochrome 2 (442) ;mRNA; r:1593684-1598236 +# +# Program: hmmsearch +# Version: 3.3.2 (Nov 2020) +# Pipeline mode: SEARCH +# Query file: /home/saskia/code/github/galaxyproject/tools-iuc/tools/tapscan/tapscan_domains_v12.txt +# Target file: /tmp/saskia/tmp4n93kzh1/files/b/7/b/dataset_b7b39fd6-41f1-440d-bfb7-da7a3a9f070e.dat +# Option settings: hmmsearch --domtblout domtblout.txt --cut_ga /home/saskia/code/github/galaxyproject/tools-iuc/tools/tapscan/tapscan_domains_v12.txt /tmp/saskia/tmp4n93kzh1/files/b/7/b/dataset_b7b39fd6-41f1-440d-bfb7-da7a3a9f070e.dat +# Current dir: /tmp/saskia/tmp4n93kzh1/job_working_directory/000/4/working +# Date: Mon Nov 13 14:57:28 2023 +# [ok]