").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var dd=a.document.documentElement;function ed(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?(typeof e.getBoundingClientRect!==L&&(d=e.getBoundingClientRect()),c=ed(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||dd;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||dd})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return W(this,function(a,d,e){var f=ed(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Mb(l.pixelPosition,function(a,c){return c?(c=Kb(a,b),Ib.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return W(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var fd=a.jQuery,gd=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=gd),b&&a.jQuery===n&&(a.jQuery=fd),n},typeof b===L&&(a.jQuery=a.$=n),n});
diff -r 16c7fc1c4bf8 -r a073fa12ef98 report_clonality/r_wrapper.sh
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/report_clonality/r_wrapper.sh Fri Mar 18 08:02:22 2016 -0400
@@ -0,0 +1,278 @@
+#!/bin/bash
+
+inputFile=$1
+outputDir=$3
+outputFile=$3/index.html #$2
+clonalType=$4
+species=$5
+locus=$6
+filterproductive=$7
+clonality_method=$8
+
+dir="$(cd "$(dirname "$0")" && pwd)"
+useD="false"
+if grep -q "$species.*${locus}D" "$dir/genes.txt" ; then
+ echo "species D region in reference db"
+ useD="true"
+fi
+echo "$species"
+if [[ "$species" == *"custom"* ]] ; then
+ loci=(${locus//;/ })
+ useD="true"
+ echo "${loci[@]}"
+ if [[ "${#loci[@]}" -eq "2" ]] ; then
+ useD="false"
+ fi
+fi
+mkdir $3
+cp $dir/genes.txt $outputDir
+Rscript --verbose $dir/RScript.r $inputFile $outputDir $outputDir $clonalType "$species" "$locus" $filterproductive ${clonality_method} 2>&1
+cp $dir/tabber.js $outputDir
+cp $dir/style.css $outputDir
+cp $dir/script.js $outputDir
+cp $dir/jquery-1.11.0.min.js $outputDir
+samples=`cat $outputDir/samples.txt`
+
+echo "
Tip: Open it in a new tab (middle mouse button or right mouse button -> 'open in new tab' on the link above)
" > $2
+echo "" >> $2
+echo "Sample/Replicate | All | Productive | Unique Productive | Unproductive | Unique Unproductive |
" >> $2
+while IFS=, read sample all productive perc_prod productive_unique perc_prod_un unproductive perc_unprod unproductive_unique perc_unprod_un
+ do
+ echo "$sample | " >> $2
+ echo "$all | " >> $2
+ echo "$productive (${perc_prod}%) | " >> $2
+ echo "$productive_unique (${perc_prod_un}%) | " >> $2
+ echo "$unproductive (${perc_unprod}%) | " >> $2
+ echo "$unproductive_unique (${perc_unprod_un}%) |
" >> $2
+done < $outputDir/productive_counting.txt
+echo "
" >> $2
+
+echo "productive_counting.txt"
+echo "
Report on:" >> $outputFile
+
+mkdir $outputDir/circos
+cp $dir/circos/* $outputDir/circos/
+CIRCOSTOOLS="/data/galaxy/galaxy-dist/toolsheddependencies/circos/0.64/saskia-hiltemann/cg_circos_plots/bbfdd52d64fd/circos-tools-0.21/tools"
+CIRCOSDIR="/data/galaxy/galaxy-dist/toolsheddependencies/circos/0.64/saskia-hiltemann/cg_circos_plots/bbfdd52d64fd/bin/"
+USECIRCOS="no"
+if [ -d "$CIRCOSDIR" ]; then
+ USECIRCOS="yes"
+fi
+echo "Using Circos: $USECIRCOS"
+sed -i "s%DATA_DIR%$outputDir/circos%" $outputDir/circos/circos.conf
+for sample in $samples; do #output the samples to a file and create the circos plots with the R script output
+ echo " $sample" >> $outputFile
+
+ if [[ "$USECIRCOS" != "yes" ]]; then
+ continue
+ fi
+
+ circos_file="$outputDir/${sample}_VJ_circos.txt"
+ echo -e -n "labels$(cat ${circos_file})" > ${circos_file}
+ cat "${circos_file}" | $CIRCOSTOOLS/tableviewer/bin/parse-table -configfile $dir/circos/parse-table.conf 2>&1 | $CIRCOSTOOLS/tableviewer/bin/make-conf -dir $outputDir/circos/
+ $CIRCOSDIR/circos -conf $outputDir/circos/circos.conf 2>&1
+ mv $outputDir/circos/circos.png $outputDir/circosVJ_${sample}.png
+
+
+ if [[ "$useD" == "true" ]] ; then
+ circos_file="$outputDir/${sample}_VD_circos.txt"
+ echo -e -n "labels$(cat ${circos_file})" > ${circos_file}
+ cat "${circos_file}" | $CIRCOSTOOLS/tableviewer/bin/parse-table -configfile $dir/circos/parse-table.conf 2>&1 | $CIRCOSTOOLS/tableviewer/bin/make-conf -dir $outputDir/circos/
+ $CIRCOSDIR/circos -conf $outputDir/circos/circos.conf 2>&1
+ mv $outputDir/circos/circos.png $outputDir/circosVD_${sample}.png
+
+ circos_file="$outputDir/${sample}_DJ_circos.txt"
+ echo -e -n "labels$(cat ${circos_file})" > ${circos_file}
+ cat "${circos_file}" | $CIRCOSTOOLS/tableviewer/bin/parse-table -configfile $dir/circos/parse-table.conf 2>&1 | $CIRCOSTOOLS/tableviewer/bin/make-conf -dir $outputDir/circos/
+ $CIRCOSDIR/circos -conf $outputDir/circos/circos.conf 2>&1
+ mv $outputDir/circos/circos.png $outputDir/circosDJ_${sample}.png
+
+ fi
+done
+echo "" >> $outputFile
+echo "" >> $outputFile
+echo "" >> $outputFile
+echo "
" >> $outputFile
+echo "
" >> $outputFile
+
+echo "

" >> $outputFile
+echo "

" >> $outputFile
+if [[ "$useD" == "true" ]] ; then
+ echo "

" >> $outputFile
+fi
+echo "

" >> $outputFile
+echo "

" >> $outputFile
+if [[ "$useD" == "true" ]] ; then
+ echo "

" >> $outputFile
+fi
+echo "

" >> $outputFile
+echo "

" >> $outputFile
+
+#Heatmaps
+
+count=1
+echo "
" >> $outputFile
+for sample in $samples; do
+ echo "
" >> $outputFile
+ if [[ "$useD" == "true" ]] ; then
+ echo " | " >> $outputFile
+ fi
+ echo " | " >> $outputFile
+ if [[ "$useD" == "true" ]] ; then
+ echo " | " >> $outputFile
+ fi
+ echo "
" >> $outputFile
+ count=$((count+1))
+done
+echo "
" >> $outputFile
+
+#circos
+
+if [[ "$USECIRCOS" == "yes" ]]; then
+
+ echo "
" >> $outputFile
+ for sample in $samples; do
+ echo "
" >> $outputFile
+ if [[ "$useD" == "true" ]] ; then
+ echo "V-D |  |
" >> $outputFile
+ fi
+ echo "V-J |  |
" >> $outputFile
+ if [[ "$useD" == "true" ]] ; then
+ echo "D-J |  |
" >> $outputFile
+ fi
+ echo "
" >> $outputFile
+ count=$((count+1))
+ done
+ echo "
" >> $outputFile
+fi
+#echo "
" >> $outputFile
+
+hasReplicateColumn="$(if head -n 1 $inputFile | grep -q 'Replicate'; then echo 'Yes'; else echo 'No'; fi)"
+echo "$hasReplicateColumn"
+#if its a 'new' merged file with replicate info
+if [[ "$hasReplicateColumn" == "Yes" ]] ; then
+ echo "
" >> $outputFile
+ for sample in $samples; do
+ echo "${clonality_method}"
+ if [[ "${clonality_method}" == "old" ]] ; then
+ echo "in old"
+ clonalityScore="$(cat $outputDir/ClonalityScore_$sample.csv)"
+ echo "
" >> $outputFile
+ echo "Clonality Score: $clonalityScore |
" >> $outputFile
+
+ #replicate,reads,squared
+ echo "Replicate ID | Number of Reads | Reads Squared | |
" >> $outputFile
+ while IFS=, read replicate reads squared
+ do
+
+ echo "$replicate | $reads | $squared | |
" >> $outputFile
+ done < $outputDir/ReplicateReads_$sample.csv
+
+ #sum of reads and reads squared
+ while IFS=, read readsSum squaredSum
+ do
+ echo "Sum | $readsSum | $squaredSum |
" >> $outputFile
+ done < $outputDir/ReplicateSumReads_$sample.csv
+
+ #overview
+ echo "Coincidence Type | Raw Coincidence Freq | Coincidence Weight | Coincidences, Weighted |
" >> $outputFile
+ while IFS=, read type count weight weightedCount
+ do
+ echo "$type | $count | $weight | $weightedCount |
" >> $outputFile
+ done < $outputDir/ClonalityOverView_$sample.csv
+ echo "
" >> $outputFile
+ else
+ echo "in new"
+ clonalityScore="$(cat $outputDir/lymphclon_clonality_${sample}.csv)"
+ echo "
" >> $outputFile
+ echo "Lymphclon clonality score:
$clonalityScore
" >> $outputFile
+ echo "
" >> $outputFile
+ while IFS=, read type count
+ do
+ echo "$type | $count |
" >> $outputFile
+ done < $outputDir/lymphclon_coincidences_$sample.csv
+ echo "
" >> $outputFile
+ fi
+ done
+ echo "
" >> $outputFile
+fi
+
+#hasJunctionData="$(if head -n 1 $inputFile | grep -qE '3V.REGION.trimmed.nt.nb'; then echo 'Yes'; else echo 'No'; fi)"
+
+#if [[ "$hasJunctionData" == "Yes" ]] ; then
+if [ -a "$outputDir/junctionAnalysisProd_mean.csv" ] ; then
+ echo "
" >> $outputFile
+ echo "
Productive meanSample | count | VH.DEL | P1 | N1 | P2 | DEL.DH | DH.DEL | P3 | N2 | P4 | DEL.JH | Total.Del | Total.N | Total.P |
" >> $outputFile
+ while IFS=, read Sample unique VHDEL P1 N1 P2 DELDH DHDEL P3 N2 P4 DELJH TotalDel TotalN TotalP
+ do
+ echo "$Sample | $unique | $VHDEL | $P1 | $N1 | $P2 | $DELDH | $DHDEL | $P3 | $N2 | $P4 | $DELJH | $TotalDel | $TotalN | $TotalP |
" >> $outputFile
+ done < $outputDir/junctionAnalysisProd_mean.csv
+ echo "
" >> $outputFile
+
+ echo "
Unproductive meanSample | count | VH.DEL | P1 | N1 | P2 | DEL.DH | DH.DEL | P3 | N2 | P4 | DEL.JH | Total.Del | Total.N | Total.P |
" >> $outputFile
+ while IFS=, read Sample unique VHDEL P1 N1 P2 DELDH DHDEL P3 N2 P4 DELJH TotalDel TotalN TotalP
+ do
+ echo "$Sample | $unique | $VHDEL | $P1 | $N1 | $P2 | $DELDH | $DHDEL | $P3 | $N2 | $P4 | $DELJH | $TotalDel | $TotalN | $TotalP |
" >> $outputFile
+ done < $outputDir/junctionAnalysisUnProd_mean.csv
+ echo "
" >> $outputFile
+
+ echo "
Productive medianSample | count | VH.DEL | P1 | N1 | P2 | DEL.DH | DH.DEL | P3 | N2 | P4 | DEL.JH | Total.Del | Total.N | Total.P |
" >> $outputFile
+ while IFS=, read Sample unique VHDEL P1 N1 P2 DELDH DHDEL P3 N2 P4 DELJH TotalDel TotalN TotalP
+ do
+ echo "$Sample | $unique | $VHDEL | $P1 | $N1 | $P2 | $DELDH | $DHDEL | $P3 | $N2 | $P4 | $DELJH | $TotalDel | $TotalN | $TotalP |
" >> $outputFile
+ done < $outputDir/junctionAnalysisProd_median.csv
+ echo "
" >> $outputFile
+
+ echo "
Unproductive medianSample | count | VH.DEL | P1 | N1 | P2 | DEL.DH | DH.DEL | P3 | N2 | P4 | DEL.JH | Total.Del | Total.N | Total.P |
" >> $outputFile
+ while IFS=, read Sample unique VHDEL P1 N1 P2 DELDH DHDEL P3 N2 P4 DELJH TotalDel TotalN TotalP
+ do
+ echo "$Sample | $unique | $VHDEL | $P1 | $N1 | $P2 | $DELDH | $DHDEL | $P3 | $N2 | $P4 | $DELJH | $TotalDel | $TotalN | $TotalP |
" >> $outputFile
+ done < $outputDir/junctionAnalysisUnProd_median.csv
+ echo "
" >> $outputFile
+
+ echo "
" >> $outputFile
+fi
+
+echo "
" >> $outputFile
+echo "
" >> $outputFile
+echo "
" >> $outputFile
+echo "
" >> $outputFile
+echo "
" >> $outputFile
+
+echo "
" >> $outputFile
+echo "
" >> $outputFile
+echo "Description | Link |
" >> $outputFile
+echo "The dataset used to generate the frequency graphs and the heatmaps (Unique based on clonaltype, $clonalType) | Download |
" >> $outputFile
+echo "The dataset used to calculate clonality score (Unique based on clonaltype, $clonalType) | Download |
" >> $outputFile
+
+echo "The dataset used to generate the CDR3 length frequency graph | Download |
" >> $outputFile
+
+echo "The dataset used to generate the V gene family frequency graph | Download |
" >> $outputFile
+if [[ "$useD" == "true" ]] ; then
+ echo "The dataset used to generate the D gene family frequency graph | Download |
" >> $outputFile
+fi
+echo "The dataset used to generate the J gene family frequency graph | Download |
" >> $outputFile
+
+echo "The dataset used to generate the V gene frequency graph | Download |
" >> $outputFile
+if [[ "$useD" == "true" ]] ; then
+ echo "The dataset used to generate the D gene frequency graph | Download |
" >> $outputFile
+fi
+echo "The dataset used to generate the J gene frequency graph | Download |
" >> $outputFile
+echo "The dataset used to generate the AA composition graph | Download |
" >> $outputFile
+
+for sample in $samples; do
+ if [[ "$useD" == "true" ]] ; then
+ echo "The data used to generate the VD heatmap for $sample. | Download |
" >> $outputFile
+ fi
+ echo "The data used to generate the VJ heatmap for $sample. | Download |
" >> $outputFile
+ if [[ "$useD" == "true" ]] ; then
+ echo "The data used to generate the DJ heatmap for $sample. | Download |
" >> $outputFile
+ fi
+done
+
+echo "
" >> $outputFile
+echo "
" >> $outputFile
diff -r 16c7fc1c4bf8 -r a073fa12ef98 report_clonality/script.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/report_clonality/script.js Fri Mar 18 08:02:22 2016 -0400
@@ -0,0 +1,36 @@
+function compareAdd(id){
+ var img = document.createElement('img');
+ img.setAttribute('src', 'HeatmapVD_' + id + '.png');
+ var td = document.createElement('td');
+ td.setAttribute('id', "comparison_vd_" + id);
+ td.appendChild(img)
+ $('#comparison_table_vd').append(td);
+
+ img = document.createElement('img');
+ img.setAttribute('src', 'HeatmapVJ_' + id + '.png');
+ td = document.createElement('td');
+ td.setAttribute('id', "comparison_vj_" + id);
+ td.appendChild(img)
+ $('#comparison_table_vj').append(td);
+
+ img = document.createElement('img');
+ img.setAttribute('src', 'HeatmapDJ_' + id + '.png');
+ td = document.createElement('td');
+ td.setAttribute('id', "comparison_dj_" + id);
+ td.appendChild(img)
+ $('#comparison_table_dj').append(td);
+
+ $('#compare_checkbox_' + id).attr('onchange', "javascript:compareRemove('" + id + "')");
+}
+
+
+function compareRemove(id){
+ $("#comparison_vd_" + id).remove()
+ $("#comparison_vj_" + id).remove()
+ $("#comparison_dj_" + id).remove()
+ $("#compare_checkbox_" + id).attr('onchange', "javascript:compareAdd('" + id + "')");
+}
+
+$( document ).ready(function () {
+ $('#junction_table').tablesorter();
+})
diff -r 16c7fc1c4bf8 -r a073fa12ef98 report_clonality/style.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/report_clonality/style.css Fri Mar 18 08:02:22 2016 -0400
@@ -0,0 +1,109 @@
+/* $Id: example.css,v 1.5 2006/03/27 02:44:36 pat Exp $ */
+
+/*--------------------------------------------------
+ REQUIRED to hide the non-active tab content.
+ But do not hide them in the print stylesheet!
+ --------------------------------------------------*/
+.tabberlive .tabbertabhide {
+ display:none;
+}
+
+/*--------------------------------------------------
+ .tabber = before the tabber interface is set up
+ .tabberlive = after the tabber interface is set up
+ --------------------------------------------------*/
+.tabber {
+}
+.tabberlive {
+ margin-top:1em;
+}
+
+/*--------------------------------------------------
+ ul.tabbernav = the tab navigation list
+ li.tabberactive = the active tab
+ --------------------------------------------------*/
+ul.tabbernav
+{
+ margin:0;
+ padding: 3px 0;
+ border-bottom: 1px solid #778;
+ font: bold 12px Verdana, sans-serif;
+}
+
+ul.tabbernav li
+{
+ list-style: none;
+ margin: 0;
+ display: inline;
+}
+
+ul.tabbernav li a
+{
+ padding: 3px 0.5em;
+ margin-left: 3px;
+ border: 1px solid #778;
+ border-bottom: none;
+ background: #DDE;
+ text-decoration: none;
+}
+
+ul.tabbernav li a:link { color: #448; }
+ul.tabbernav li a:visited { color: #667; }
+
+ul.tabbernav li a:hover
+{
+ color: #000;
+ background: #AAE;
+ border-color: #227;
+}
+
+ul.tabbernav li.tabberactive a
+{
+ background-color: #fff;
+ border-bottom: 1px solid #fff;
+}
+
+ul.tabbernav li.tabberactive a:hover
+{
+ color: #000;
+ background: white;
+ border-bottom: 1px solid white;
+}
+
+/*--------------------------------------------------
+ .tabbertab = the tab content
+ Add style only after the tabber interface is set up (.tabberlive)
+ --------------------------------------------------*/
+.tabberlive .tabbertab {
+ padding:5px;
+ border:1px solid #aaa;
+ border-top:0;
+
+ /* If you don't want the tab size changing whenever a tab is changed
+ you can set a fixed height */
+
+ /* height:200px; */
+
+ /* If you set a fix height set overflow to auto and you will get a
+ scrollbar when necessary */
+
+ /* overflow:auto; */
+}
+
+/* If desired, hide the heading since a heading is provided by the tab */
+.tabberlive .tabbertab h2 {
+ display:none;
+}
+.tabberlive .tabbertab h3 {
+ display:none;
+}
+
+/* Example of using an ID to set different styles for the tabs on the page */
+.tabberlive#tab1 {
+}
+.tabberlive#tab2 {
+}
+.tabberlive#tab2 .tabbertab {
+ height:200px;
+ overflow:auto;
+}
diff -r 16c7fc1c4bf8 -r a073fa12ef98 report_clonality/tabber.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/report_clonality/tabber.js Fri Mar 18 08:02:22 2016 -0400
@@ -0,0 +1,40 @@
+/* Copyright (c) 2006 Patrick Fitzgerald */
+
+function tabberObj(argsObj)
+{var arg;this.div=null;this.classMain="tabber";this.classMainLive="tabberlive";this.classTab="tabbertab";this.classTabDefault="tabbertabdefault";this.classNav="tabbernav";this.classTabHide="tabbertabhide";this.classNavActive="tabberactive";this.titleElements=['h2','h3','h4','h5','h6'];this.titleElementsStripHTML=true;this.removeTitle=true;this.addLinkId=false;this.linkIdFormat='
nav';for(arg in argsObj){this[arg]=argsObj[arg];}
+this.REclassMain=new RegExp('\\b'+this.classMain+'\\b','gi');this.REclassMainLive=new RegExp('\\b'+this.classMainLive+'\\b','gi');this.REclassTab=new RegExp('\\b'+this.classTab+'\\b','gi');this.REclassTabDefault=new RegExp('\\b'+this.classTabDefault+'\\b','gi');this.REclassTabHide=new RegExp('\\b'+this.classTabHide+'\\b','gi');this.tabs=new Array();if(this.div){this.init(this.div);this.div=null;}}
+tabberObj.prototype.init=function(e)
+{var
+childNodes,i,i2,t,defaultTab=0,DOM_ul,DOM_li,DOM_a,aId,headingElement;if(!document.getElementsByTagName){return false;}
+if(e.id){this.id=e.id;}
+this.tabs.length=0;childNodes=e.childNodes;for(i=0;i/gi," ");t.headingText=t.headingText.replace(/<[^>]+>/g,"");}
+break;}}}
+if(!t.headingText){t.headingText=i+1;}
+DOM_li=document.createElement("li");t.li=DOM_li;DOM_a=document.createElement("a");DOM_a.appendChild(document.createTextNode(t.headingText));DOM_a.href="javascript:void(null);";DOM_a.title=t.headingText;DOM_a.onclick=this.navClick;DOM_a.tabber=this;DOM_a.tabberIndex=i;if(this.addLinkId&&this.linkIdFormat){aId=this.linkIdFormat;aId=aId.replace(//gi,this.id);aId=aId.replace(//gi,i);aId=aId.replace(//gi,i+1);aId=aId.replace(//gi,t.headingText.replace(/[^a-zA-Z0-9\-]/gi,''));DOM_a.id=aId;}
+DOM_li.appendChild(DOM_a);DOM_ul.appendChild(DOM_li);}
+e.insertBefore(DOM_ul,e.firstChild);e.className=e.className.replace(this.REclassMain,this.classMainLive);this.tabShow(defaultTab);if(typeof this.onLoad=='function'){this.onLoad({tabber:this});}
+return this;};tabberObj.prototype.navClick=function(event)
+{var
+rVal,a,self,tabberIndex,onClickArgs;a=this;if(!a.tabber){return false;}
+self=a.tabber;tabberIndex=a.tabberIndex;a.blur();if(typeof self.onClick=='function'){onClickArgs={'tabber':self,'index':tabberIndex,'event':event};if(!event){onClickArgs.event=window.event;}
+rVal=self.onClick(onClickArgs);if(rVal===false){return false;}}
+self.tabShow(tabberIndex);return false;};tabberObj.prototype.tabHideAll=function()
+{var i;for(i=0;i
+
+
+#if $gene_selection.source == "imgtdb"
+ report_clonality/r_wrapper.sh $in_file $out_file $out_file.files_path "$clonaltype" "${gene_selection.species}" "${gene_selection.locus}" $filterproductive $clonality_method
+#else
+ report_clonality/r_wrapper.sh $in_file $out_file $out_file.files_path "$clonaltype" "custom" "${gene_selection.vgenes};${gene_selection.dgenes};${gene_selection.jgenes}" $filterproductive $clonality_method
+#end if
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ weblogo
+
+
+
+**INPUT**
+
+One or more ARGalaxy proprietary format files combined with the ARGalaxy Experimental Design tool
+
+
+.. class:: warningmark
+
+Custom gene ordering based on position on genome:
+
+**Human**
+
+IGH::
+
+ V:
+ IGHV7-81,IGHV3-74,IGHV3-73,IGHV3-72,IGHV3-71,IGHV2-70,IGHV1-69,IGHV3-66,IGHV3-64,IGHV4-61,IGHV4-59,IGHV1-58,IGHV3-53,IGHV3-52,IGHV5-a,IGHV5-51,IGHV3-49,IGHV3-48,IGHV3-47,IGHV1-46,IGHV1-45,IGHV3-43,IGHV4-39,IGHV3-35,IGHV4-34,IGHV3-33,IGHV4-31,IGHV4-30-4,IGHV4-30-2,IGHV3-30-3,IGHV3-30,IGHV4-28,IGHV2-26,IGHV1-24,IGHV3-23,IGHV3-22,IGHV3-21,IGHV3-20,IGHV3-19,IGHV1-18,IGHV3-15,IGHV3-13,IGHV3-11,IGHV3-9,IGHV1-8,IGHV3-7,IGHV2-5,IGHV7-4-1,IGHV4-4,IGHV4-b,IGHV1-3,IGHV1-2,IGHV6-1
+ D:
+ IGHD1-1,IGHD2-2,IGHD3-3,IGHD6-6,IGHD1-7,IGHD2-8,IGHD3-9,IGHD3-10,IGHD4-11,IGHD5-12,IGHD6-13,IGHD1-14,IGHD2-15,IGHD3-16,IGHD4-17,IGHD5-18,IGHD6-19,IGHD1-20,IGHD2-21,IGHD3-22,IGHD4-23,IGHD5-24,IGHD6-25,IGHD1-26,IGHD7-27
+ J:
+ IGHJ1,IGHJ2,IGHJ3,IGHJ4,IGHJ5,IGHJ6
+
+
+IGK::
+
+ V:
+ IGKV3D-7,IGKV1D-8,IGKV1D-43,IGKV3D-11,IGKV1D-12,IGKV1D-13,IGKV3D-15,IGKV1D-16,IGKV1D-17,IGKV3D-20,IGKV2D-26,IGKV2D-28,IGKV2D-29,IGKV2D-30,IGKV1D-33,IGKV1D-39,IGKV2D-40,IGKV2-40,IGKV1-39,IGKV1-33,IGKV2-30,IGKV2-29,IGKV2-28,IGKV1-27,IGKV2-24,IGKV3-20,IGKV1-17,IGKV1-16,IGKV3-15,IGKV1-13,IGKV1-12,IGKV3-11,IGKV1-9,IGKV1-8,IGKV1-6,IGKV1-5,IGKV5-2,IGKV4-1
+ J:
+ IGKJ1,IGKJ2,IGKJ3,IGKJ4,IGKJ5
+
+
+IGL::
+
+ V:
+ IGLV4-69,IGLV8-61,IGLV4-60,IGLV6-57,IGLV5-52,IGLV1-51,IGLV9-49,IGLV1-47,IGLV7-46,IGLV5-45,IGLV1-44,IGLV7-43,IGLV1-41,IGLV1-40,IGLV5-39,IGLV5-37,IGLV1-36,IGLV3-27,IGLV3-25,IGLV2-23,IGLV3-22,IGLV3-21,IGLV3-19,IGLV2-18,IGLV3-16,IGLV2-14,IGLV3-12,IGLV2-11,IGLV3-10,IGLV3-9,IGLV2-8,IGLV4-3,IGLV3-1
+ J:
+ IGLJ1,IGLJ2,IGLJ3,IGLJ6,IGLJ7
+
+
+TRB::
+
+ V:
+ TRBV2,TRBV3-1,TRBV4-1,TRBV5-1,TRBV6-1,TRBV4-2,TRBV6-2,TRBV4-3,TRBV6-3,TRBV7-2,TRBV6-4,TRBV7-3,TRBV9,TRBV10-1,TRBV11-1,TRBV10-2,TRBV11-2,TRBV6-5,TRBV7-4,TRBV5-4,TRBV6-6,TRBV5-5,TRBV7-6,TRBV5-6,TRBV6-8,TRBV7-7,TRBV6-9,TRBV7-8,TRBV5-8,TRBV7-9,TRBV13,TRBV10-3,TRBV11-3,TRBV12-3,TRBV12-4,TRBV12-5,TRBV14,TRBV15,TRBV16,TRBV18,TRBV19,TRBV20-1,TRBV24-1,TRBV25-1,TRBV27,TRBV28,TRBV29-1,TRBV30
+ D:
+ TRBD1,TRBD2
+ J:
+ TRBJ1-1,TRBJ1-2,TRBJ1-3,TRBJ1-4,TRBJ1-5,TRBJ1-6,TRBJ2-1,TRBJ2-2,TRBJ2-3,TRBJ2-4,TRBJ2-5,TRBJ2-6,TRBJ2-7
+
+
+TRA::
+
+ V:
+ TRAV1-1,TRAV1-2,TRAV2,TRAV3,TRAV4,TRAV5,TRAV6,TRAV7,TRAV8-1,TRAV9-1,TRAV10,TRAV12-1,TRAV8-2,TRAV8-3,TRAV13-1,TRAV12-2,TRAV8-4,TRAV13-2,TRAV14/DV4,TRAV9-2,TRAV12-3,TRAV8-6,TRAV16,TRAV17,TRAV18,TRAV19,TRAV20,TRAV21,TRAV22,TRAV23/DV6,TRAV24,TRAV25,TRAV26-1,TRAV27,TRAV29/DV5,TRAV30,TRAV26-2,TRAV34,TRAV35,TRAV36/DV7,TRAV38-1,TRAV38-2/DV8,TRAV39,TRAV40,TRAV41
+ J:
+ TRAJ57,TRAJ56,TRAJ54,TRAJ53,TRAJ52,TRAJ50,TRAJ49,TRAJ48,TRAJ47,TRAJ46,TRAJ45,TRAJ44,TRAJ43,TRAJ42,TRAJ41,TRAJ40,TRAJ39,TRAJ38,TRAJ37,TRAJ36,TRAJ34,TRAJ33,TRAJ32,TRAJ31,TRAJ30,TRAJ29,TRAJ28,TRAJ27,TRAJ26,TRAJ24,TRAJ23,TRAJ22,TRAJ21,TRAJ20,TRAJ18,TRAJ17,TRAJ16,TRAJ15,TRAJ14,TRAJ13,TRAJ12,TRAJ11,TRAJ10,TRAJ9,TRAJ8,TRAJ7,TRAJ6,TRAJ5,TRAJ4,TRAJ3
+
+
+TRG::
+
+ V:
+ TRGV9,TRGV8,TRGV5,TRGV4,TRGV3,TRGV2
+ J:
+ TRGJ2,TRGJP2,TRGJ1,TRGJP1
+
+
+TRD::
+
+ V:
+ TRDV1,TRDV2,TRDV3
+ D:
+ TRDD1,TRDD2,TRDD3
+ J:
+ TRDJ1,TRDJ4,TRDJ2,TRDJ3
+
+
+**Mouse**
+
+TRB::
+
+ V:
+ TRBV1,TRBV2,TRBV3,TRBV4,TRBV5,TRBV12-1,TRBV13-1,TRBV12-2,TRBV13-2,TRBV13-3,TRBV14,TRBV15,TRBV16,TRBV17,TRBV19,TRBV20,TRBV23,TRBV24,TRBV26,TRBV29,TRBV30,TRBV31
+ D:
+ TRBD1,TRBD2
+ J:
+ TRBJ1-1,TRBJ1-2,TRBJ1-3,TRBJ1-4,TRBJ1-5,TRBJ2-1,TRBJ2-2,TRBJ2-3,TRBJ2-4,TRBJ2-5,TRBJ2-6,TRBJ2-7
+
+
+**OUTPUT**
+
+It generates the following result:
+
+
diff -r 16c7fc1c4bf8 -r a073fa12ef98 subclass_definition.db.nhr
Binary file subclass_definition.db.nhr has changed
diff -r 16c7fc1c4bf8 -r a073fa12ef98 subclass_definition.db.nin
Binary file subclass_definition.db.nin has changed
diff -r 16c7fc1c4bf8 -r a073fa12ef98 subclass_definition.db.nsq
Binary file subclass_definition.db.nsq has changed
diff -r 16c7fc1c4bf8 -r a073fa12ef98 tool_dependencies.xml
--- a/tool_dependencies.xml Fri Mar 18 07:50:34 2016 -0400
+++ b/tool_dependencies.xml Fri Mar 18 08:02:22 2016 -0400
@@ -1,24 +1,36 @@
-
-
-
-
+
- ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/2.2.30/ncbi-blast-2.2.30+-x64-linux.tar.gz
-
- bin/blastn
- $INSTALL_DIR
-
-
- $INSTALL_DIR
-
+ https://github.com/mikessh/higblast/releases/download/v0.6/igblastwrapper_linux64.tar.gz
+
+ bin
+ $INSTALL_DIR/
+
+
+ data
+ $INSTALL_DIR/
+
+
+ igblastwrp.jar
+ $INSTALL_DIR/
+
+
+ $INSTALL_DIR/
+
- downloads blast (ftp.ncbi.nlm.nih.gov/blast/executables/blast+/2.2.30/ncbi-blast-2.2.30+-x64-linux.tar.gz) and keeps the blastn executable
+Downloads https://github.com/mikessh/higblast/
+
+
+
+
-
diff -r 16c7fc1c4bf8 -r a073fa12ef98 wrapper.sh
--- a/wrapper.sh Fri Mar 18 07:50:34 2016 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,210 +0,0 @@
-#!/bin/bash
-set -e
-dir="$(cd "$(dirname "$0")" && pwd)"
-input=$1
-method=$2
-output=$3
-outdir=$4
-title=$5
-include_fr1=$6
-functionality=$7
-unique=$8
-naive_output=$9
-filter_unique=${10}
-mkdir $outdir
-
-echo "---------------- read parameters ----------------"
-
-echo "unpacking IMGT file"
-
-type="`file $input`"
-if [[ "$type" == *"Zip archive"* ]] ; then
- echo "Zip archive"
- echo "unzip $input -d $PWD/files/"
- unzip $input -d $PWD/files/
-elif [[ "$type" == *"XZ compressed data"* ]] ; then
- echo "ZX archive"
- echo "tar -xJf $input -C $PWD/files/"
- mkdir -p $PWD/files/$title
- tar -xJf $input -C $PWD/files/$title
-fi
-
-cat $PWD/files/*/1_* > $PWD/summary.txt
-cat $PWD/files/*/3_* > $PWD/sequences.txt
-cat $PWD/files/*/5_* > $PWD/aa.txt
-cat $PWD/files/*/6_* > $PWD/junction.txt
-cat $PWD/files/*/7_* > $PWD/mutationanalysis.txt
-cat $PWD/files/*/8_* > $PWD/mutationstats.txt
-cat $PWD/files/*/10_* > $PWD/hotspots.txt
-
-#BLASTN_DIR="/home/galaxy/tmp/blast/ncbi-blast-2.2.30+/bin"
-
-echo "${BLASTN_DIR}"
-
-echo "identification ($method)"
-
-echo "blast or custom"
-
-if [[ "${method}" == "custom" ]] ; then
- echo "custom"
- python $dir/gene_identification.py --input $PWD/summary.txt --output $outdir/identified_genes.txt
-else
- echo "blast"
- ID_index=$(cat $PWD/summary.txt | grep -o -P ".+Sequence ID" | grep -o -P "\t" | wc -l)
- ID_index=$((ID_index+1))
- sequence_index=$(cat $PWD/summary.txt | grep -o -P ".+\tSequence" | grep -o -P "\t" | wc -l)
- sequence_index=$((sequence_index+1))
-
- echo "$ID_index ${sequence_index}"
-
- cat $PWD/summary.txt | tail -n+2 | cut -f ${ID_index},${sequence_index} | awk '{print ">" $1 "\n" $2}' > $PWD/sequences.fasta
-
- echo -e "qseqid\tsseqid\tpident\tlength\tmismatch\tgapopen\tqstart\tqend\tsstart\tsend\tevalue\tbitscore" > $outdir/identified_genes.txt
- ${BLASTN_DIR}/blastn -task blastn -db $dir/subclass_definition.db -query $PWD/sequences.fasta -outfmt 6 >> $outdir/identified_genes.txt
-fi
-
-echo "---------------- merge_and_filter.r ----------------"
-
-Rscript $dir/merge_and_filter.r $PWD/summary.txt $PWD/sequences.txt $PWD/mutationanalysis.txt $PWD/mutationstats.txt $PWD/hotspots.txt $outdir/identified_genes.txt $outdir/merged.txt $outdir/unmatched.txt $method $functionality $unique ${filter_unique}
-
-echo "---------------- mutation_analysis.r ----------------"
-
-genes="ca,ca1,ca2,cg,cg1,cg2,cg3,cg4,cm"
-echo "R mutation analysis"
-Rscript $dir/mutation_analysis.r $outdir/merged.txt $genes $outdir ${include_fr1} 2>&1
-
-#echo "." > $output
-#exit 0
-
-
-
-echo "---------------- mutation_analysis.py ----------------"
-
-python $dir/mutation_analysis.py --input $outdir/merged.txt --genes $genes --includefr1 "${include_fr1}" --output $outdir/hotspot_analysis.txt
-echo "R AA histogram"
-
-echo "---------------- aa_histogram.r ----------------"
-
-Rscript $dir/aa_histogram.r $outdir/aa_mutations.txt $outdir/aa_histogram.png 2>&1
-
-genes=(ca ca1 ca2 cg cg1 cg2 cg3 cg4 cm)
-
-funcs=(sum mean median)
-
-
-echo "$title
" >> $output
-echo "---------------- main tables ----------------"
-for func in ${funcs[@]}
-do
-
- echo "---------------- $func table ----------------"
-
- cat $outdir/mutations_${func}.txt $outdir/hotspot_analysis_${func}.txt > $outdir/result.txt
-
- echo "${func} table
" >> $output
- echo "info | " >> $output
- for gene in ${genes[@]}
- do
- tmp=`cat $outdir/${gene}_${func}_n.txt`
- echo "${gene} (N = $tmp) | " >> $output
- done
- tmp=`cat $outdir/all_${func}_n.txt`
- echo "all (N = $tmp) | " >> $output
-
- while IFS=, read name cax cay caz ca1x ca1y ca1z ca2x ca2y ca2z cgx cgy cgz cg1x cg1y cg1z cg2x cg2y cg2z cg3x cg3y cg3z cg4x cg4y cg4z cmx cmy cmz allx ally allz
- do
- if [ "$name" == "FR S/R (ratio)" ] || [ "$name" == "CDR S/R (ratio)" ] ; then #meh
- echo "
---|
$name | ${cax}/${cay} (${caz}) | ${ca1x}/${ca1y} (${ca1z}) | ${ca2x}/${ca2y} (${ca2z}) | ${cgx}/${cgy} (${cgz}) | ${cg1x}/${cg1y} (${cg1z}) | ${cg2x}/${cg2y} (${cg2z}) | ${cg3x}/${cg3y} (${cg3z}) | ${cg4x}/${cg4y} (${cg4z}) | ${cmx}/${cmy} (${cmz}) | ${allx}/${ally} (${allz}) |
" >> $output
- else
- echo "$name | ${cax}/${cay} (${caz}%) | ${ca1x}/${ca1y} (${ca1z}%) | ${ca2x}/${ca2y} (${ca2z}%) | ${cgx}/${cgy} (${cgz}%) | ${cg1x}/${cg1y} (${cg1z}%) | ${cg2x}/${cg2y} (${cg2z}%) | ${cg3x}/${cg3y} (${cg3z}%) | ${cg4x}/${cg4y} (${cg4z}%) | ${cmx}/${cmy} (${cmz}%) | ${allx}/${ally} (${allz}%) |
" >> $output
- fi
- done < $outdir/result.txt
-
-done
-
-echo "---------------- download links ----------------"
-
-echo "
" >> $output
-echo "unmatched
" >> $output
-echo "motif per sequence
" >> $output
-echo "all data
" >> $output
-echo "mutations by id
" >> $output
-echo "AA mutations location by id
" >> $output
-echo "Absant AA locations by id
" >> $output
-
-echo "---------------- images ----------------"
-
-echo "
" >> $output
-echo "download data
" >> $output
-if [ -a $outdir/ca.png ]
-then
- echo "
" >> $output
- echo "download data
" >> $output
-fi
-if [ -a $outdir/cg.png ]
-then
- echo "
" >> $output
- echo "download data
" >> $output
-fi
-if [ -a $outdir/scatter.png ]
-then
- echo "
" >> $output
- echo "download data
" >> $output
-fi
-if [ -a $outdir/frequency_ranges.png ]
-then
- echo "
" >> $output
- echo "download class data
" >> $output
- echo "download subclass data
" >> $output
-fi
-if [ -a $outdir/aa_histogram.png ]
-then
- echo "
" >> $output
- echo "download data
" >> $output
-fi
-
-for gene in ${genes[@]}
-do
- echo "$gene transition table" >> $output
- while IFS=, read from a c g t
- do
- echo "$from | $a | $c | $g | $t |
" >> $output
- done < $outdir/transitions_${gene}_sum.txt
- echo "
" >> $output
-done
-
-echo "All transition table" >> $output
-while IFS=, read from a c g t
- do
- echo "$from | $a | $c | $g | $t |
" >> $output
-done < $outdir/transitions_all_sum.txt
-echo "
" >> $output
-
-echo "" >> $output
-
-
-#optional output for naive
-
-echo "---------------- aa_histogram.r ----------------"
-
-if [[ "$naive_output" != "None" ]]
-then
- echo "---------------- imgt_loader.r ----------------"
- #python $dir/imgt_loader.py --summ $PWD/summary.txt --aa $PWD/aa.txt --junction $PWD/junction.txt --output $naive_output
- Rscript --verbose $dir/imgt_loader.r $PWD/summary.txt $PWD/aa.txt $PWD/junction.txt ${naive_output} 2>&1
- echo "---------------- naive_output.r ----------------"
- Rscript $dir/naive_output.r $naive_output $outdir/merged.txt $naive_output 2>&1
-fi
-
-
-
-
-
-
-
-
-
-
-
-#rm $outdir/HS12RSS.txt
-#rm $outdir/HS23RSS.txt